홈으로 | 무료회원가입 | 아이디/비번찾기
추천음악방송 메인홈 1대1상담
운.영.자.1대1.상담
온라이브 음악방송
음악방송 앱 다운로드
OKTROT(무료음악채널)
아리랑가요(무료음악채널)
보안∵서버∵쿠키
윈도우∵프레임
이미지∵배경
시간∵달력∵계산
상태바∵타이틀바
음악∵영상
폼∵전송∵테이블
키보드∵마우스
효과∵링크∵메뉴
Script∵php
기타
PHP 강좌
윈도우관련팁
웹관련팁
홈페이지제작팁
기본강좌
레지스트리
윈도우서버
리눅스서버
Android
달력, 월~일(일~월) 구간, 요일수 등 종합
8년 전
‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥

▶ 월요일부터 일요일까지 구간별 출력

<?php
$y = 2010;
$m = 4;
sscanf(date('wt',mktime(0,0,0,$m,1,$y)),'%1d%2d',$w,$t); // 시작요일,전체일수
for ($i=$s=1,$e=(7-$w)%7+1,$l=ceil(($t+$w)/7);$i<=$l;$i++,$s=$e+1,$e=$i<$l?$s+6:$t)
{
    printf('%d : %02d/%02d ~ %02d/%02d<br />'."\n",$i,$m,$s,$m,$e);
}
?>

▷ 실행 결과
1 : 04/01 ~ 04/04
2 : 04/05 ~ 04/11
3 : 04/12 ~ 04/18
4 : 04/19 ~ 04/25
5 : 04/26 ~ 04/30


▶ 일요일부터 월요일까지 구간별 출력
<?php
$y = 2010;
$m = 4;
sscanf(date('wt',mktime(0,0,0,$m,1,$y)),'%1d%2d',$w,$t);
for ($i=$s=1,$e=7-$w,$l=ceil(($t+$w)/7);$i<=$l;$i++,$s=$e+1,$e=$i<$l?$s+6:$t)
{
    printf('%d : %02d/%02d ~ %02d/%02d<br />'."\n",$i,$m,$s,$m,$e);
}
?>

▷ 실행 결과
1 : 04/01 ~ 04/03
2 : 04/04 ~ 04/10
3 : 04/11 ~ 04/17
4 : 04/18 ~ 04/24
5 : 04/25 ~ 04/30

‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥

* 반복문 내 date(), mktime(), strtotime() 등의 함수 사용이 없어 속도가 매우 빠릅니다.

* 처음 요일값, 일수 구하는 부분 아래 코드로 바꾸면? 만년달력!
$mm=array(31,28,31,30,31,30,31,31,30,31,30,31);
if($y%4==0&&$y%100!=0||$y%400==0)$mm[1]++;
$a=($y-1)*365+(int)(($y-1)/4)-(int)(($y-1)/100)+(int)(($y-1)/400)+array_sum(array_slice($mm,0,$m-1))+1;
$w=$a%7;$t=$mm[$m-1];

‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥

* 예전의 장난성 코드 추가합니다.

<?php
$y = 2010;
$m = 4;
sscanf(date('wt',mktime(0,0,0,$m,1,$y)),'%1d%2d',$w,$t);
$c=$t;$l=ceil(($t+$w)/7); // 주차
for($i=1,$a=array();$i<=$t;$i++)$a[]=$i<10?'0'.$i:$i; // range(1,$t)
for($i=0;$i<$w;$i++){array_unshift($a,'  ');$c++;} // 배열 앞 추가
for($i=0,$n=7*$l-$c;$i<$n;$i++)array_push($a,'  '); // 배열 뒤 추가
$a=array_chunk($a,7); // 7개씩 나누기
?>

$a의 배열값은?

Array
(
    [0] => Array
        (
            [0] =>  
            [1] =>  
            [2] =>  
            [3] =>  
            [4] => 01
            [5] => 02
            [6] => 03
        )
    [1] => Array
        (
            [0] => 04
            [1] => 05
            [2] => 06
            [3] => 07
            [4] => 08
            [5] => 09
            [6] => 10
        )
    [2] => Array
        (
            [0] => 11
            [1] => 12
            [2] => 13
            [3] => 14
            [4] => 15
            [5] => 16
            [6] => 17
        )
    [3] => Array
        (
            [0] => 18
            [1] => 19
            [2] => 20
            [3] => 21
            [4] => 22
            [5] => 23
            [6] => 24
        )
    [4] => Array
        (
            [0] => 25
            [1] => 26
            [2] => 27
            [3] => 28
            [4] => 29
            [5] => 30
            [6] =>  
        )
)

▷ 배열값이 이렇다보니 다양하게 활용이 가능합니다.
  예를 들어 달력 출력은 아래처럼 하면 되죠.

- 코드
$cal = 'Su Mo Tu We Th Fr Sa'."\n";
foreach($a as $k=>$v)$cal.=implode(' ',$v)."\n";
echo '<xmp style="font-family:GulimChe;">'.$cal.'</xmp>';

- 실행 결과
Su Mo Tu We Th Fr Sa
                  01 02 03
04 05 06 07 08 09 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30    
(폰트가 고정폭이 아니라··· ㅠ_ㅠ)
(참고로 리눅스에서는 cal 명령 이용하면 편합니다. $cal = `cal`; // 사용법은 알아서···.)

스타일 적용으로 깔끔한 달력을 만들어보세요. '-');


▷ 지정한 요일이 며칠 있나?

- 코드
$dw = 4; // 목요일 (0:일~6:토)
$dc = 0;
foreach($a as $k=>$v) if(trim($v[$dw]))$dc++;
echo $dc;

- 실행결과
5


뭐 이런 식으로 활용하면 됩니다. 이상 끝.

────────────────────────────────────────

▶ 만년달력

$y : 년
$m : 월

$a : 각 달의 날수
$a[$m-1] : 해당 월의 날수
$b : 1년 1월 1일부터 지정한 날짜(년,월)까지의 날수
$w : 지정한 월의 1일 요일값 (0:일,1:월,~,5:금,6:토)
$l : 해당 월의 총 주 (반복 횟수)
$r : 반환값

for()내에서,
$s : 시작일
$e : 종료일
$o : 주별 임시

<?php
function calendar($y,$m)
{
    $a=array(31,28,31,30,31,30,31,31,30,31,30,31);
    if($y%4==0&&$y%100!=0||$y%400==0)$a[1]++;
    $b=($y-1)*365+(int)(($y-1)/4)-(int)(($y-1)/100)+(int)(($y-1)/400)+1;
    $b+=array_sum(array_slice($a,0,$m-1));$w=$b%7;$l=ceil(($a[$m-1]+$w)/7);
    $r=str_pad(sprintf('%04d년%02d일',$y,$m),20,' ',STR_PAD_BOTH)."\n";
    $r.='일 월 화 수 목 금 토'."\n".str_repeat('  ',$w); // 공백3칸
    for ($i=$s=1,$e=7-$w;$i<=$l;$i++,$s=$e+1,$e=$i<$l?$s+6:$a[$m-1])
    {
        for($j=$s,$o='';$j<=$e;$j++)$o.=sprintf('%02d ',$j);
        $r.=rtrim($o);if($i<$l)$r.="\n";
    }
    return $r;
}
echo '<xmp style="font-family:GulimChe;">'.calendar(2010,4).'</xmp>';
?>


▷ 실행 결과
        2010년04일    
일  월  화  수  목  금  토
                    01 02 03
04 05 06 07 08 09 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30
(고정폭 글꼴이 아니라 대충 조정)


▷ 참고

위에도 적었었지만 Linux 등에서는 아래처럼 달력을 구할 수 있습니다.

<?php
$calendar = `cal 4 2010`;
echo '<xmp style="font-family:GulimChe;">'.$calendar.'</xmp>';
?>

          April 2010
Su Mo Tu We Th Fr Sa
       1 2 3
  4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30

────────────────────────────────────────

▶ 지정한 날짜 사이에 지정한 요일이 며칠 있는가?

<?php
function get_wc($s,$e,$w)
{
    $y=date('w',$t=strtotime($s));$g=(strtotime($e)-$t)/86400+1;
    for($i=$c=0,$n=$y;$i<$g;$i++,$n=++$n%7)if($w==$n)$c++;
    return $c;
}
echo get_wc('2010-04-01','2010-04-30',0).'<br />'; // 4
echo get_wc('2010-04-01','2010-04-30',4).'<br />'; // 5
?>
추천추천 : 515 추천 목록
번호 제목
3,025
 여러 도메인들 간 쿠키 공유하기
3,024
 태그 사이에 있는 텍스트를 추출
3,023
 [JQuery] textbox focus on off일때 숫자 콤마 보여주기
3,022
 쿠키 생성,가져오기,삭제
3,021
 사용자 함수 모음
3,020
 마우스,키보드 제한 ( 오른쪽클릭,드래그,영역선택등..)
3,019
 [HTML5] <video> - DOM으로 제어하기
3,018
 HTML5 video 태그에서 영상 좌우반전
3,017
 PHP - 특정 태그 및 문자열 추출, 제거
3,016
 [PHP] define과 defined의 차이
3,015
 우클릭 완벽차단 스크립트
3,014
 iframe 높이 100% 맞추기
3,013
 curl 함수를 이용한 HTTP REFERER 변경
3,012
 윈도우10 시스템 파일 및 Dism 검사
3,011
 텍스트 줄바꿈, 글자자르기 CSS
3,010
 jQuery Mobile에서 유용한 코드 10가지.
3,009
 [PHP] dirname()함수와 $_SERVER 관련 상수들
3,008
 [PHP] 파일 크기, 사이즈 불러오는 함수, filesize()
3,007
 [jQuery] jQuery Quick API
3,006
 [ transition ] 링크 hover 색상 변화 속도 조절
3,005
 PHP 5.3.0 에서 사라진 함수들 대체
3,004
 어떤 파일들이 include 나 require 되었는지 확인하는 함수(get_included_files)
3,003
 PHP 날짜 형식 및 계산하기(날짜 더하고 빼기)
3,002
 jQuery Mobile에서 유용한 코드 10가지.
3,001
 값이 배열 안에 존재하는지 확인하는 in_array함수
목록
추억의가요방
인기절정뽕짝파티
CDN 추천곡
종합성인가요방
못잊을옛날노래
카바레 음악
트롯디스코팡팡
관광 메들리
트롯카페
가요감상실
추억의옛노래
스페셜가요광장
BillBoard Free
추천가요모음
경음악.전자올겐
스페셜음악여행
WOLRD POPs
K-POP\BillBoard
POP TOP BEST

최신인기가요특집
추천가요\인기
F뮤직 인기\발라드
F뮤직 애창\트로트
트로트성인가요
인기가요
프리미엄 POP
경음악\기타
프리미엄 최신가요
프리미엄 성인가요
뮤직트로트 부산광역시부산진구 가야동 ㅣ 개인정보취급방침
Copyright (C) musictrot All rights reserved.