송현컴퓨터학원
PHP DATE 관련 내용
phpinfo(); echo phpversion();
Server PHP Version : 5.3.13p1

  1. DateTime() 객체 생성
    $now = new DateTime()

  2. $now->format('Y-m-d H:i:s'); 2024-11-15 03:07:11
    $now->format('y-m-d h:i:s A'); 24-11-15 03:07:11 AM        ※설명 : A(AM/PM) a(am/pm)

  3. 날짜 및 시간 조작
    $date = new DateTime('2024-5-24')

  4. $date->format('Y-m-d'); 2024-05-24
    $date->modify('+5 days'); 2024-05-29        ※설명 : 일 추가
    $date->modify('-2 months'); 2024-03-29        ※설명 : 월 빼기
    $date->modify('2 years'); 2026-03-29        ※설명 : 년 추가

  5. 날짜 차이 계산
    $opening_day = new DateTime('1995-2-8'); //개원일
    $current_day = new DateTime(); //오늘 날짜
    $interval = $opening_day->diff($current_day) //날짜 차이

  6. $interval->format('%R%a 일'); +10873 일        ※설명 : 개원일로 부터 오늘까지의 날수
    %R : 차이의 부호를 표시. %a : 두 날짜 간의 절대적인 일수 차이

    number_fromat($interval->format('%R%a days'),2); 10,873.00        ※설명 : 천단위 구분자 넣기

    $interval->y."년".$interval->m."월".$interval->d."일"; 29년9월7일        ※설명 : 흘러간 년, 월, 일 표시

  7. 천 단위 쉼표(콤마) 추가하기
    $number = 123456.789;
    $formated_number = number_format($number,2);
    123,456.79 ※설명 : number_format(숫자, 소수점 정밀도)

  8. 요일 출력하기
    $date = new DateTime();
    $date->format('l');
    Friday        ※설명 : 요일을 풀 네임으로 표시
    $date->format('D'); Fri        ※설명 : 요일을 약어로 표시


  9. 요일(한글) 출력하기
    $date = new DateTime();
    $dayOfWeek = $date->format('w');         ※설명 : 주중에 몇번째 요일인지 반환 (0:일, 1:월,....6:토)
    $daysOfWeekKorean = array('일','월','화','수','목','금','토');
    echo $daysOfWeekKorean[$dayOfWeek];

  10. 특정 날짜 유효성 검사
    if(checkdate(5,30,2024)) {
             echo "2024년 5월 30일은 유효한 날짜입니다.";
    }
    else {
            echo "2024년 5월 30일은 유효하지 않은 날짜입니다.";
    }

  11. 문자열을 타임스탬프로 변환
    $timeStamp = strtotime('2024-8-14');
    echo date('Y-m-d',$timeStamp); 2024-08-14

  12. 문자열 반복
    $spaces = str_repeat(" ",12);
    $text_with_spaces = "SonghyunComputerAcademy".$spaces."054-852-8048";
    echo $text_with_spaces;

    SonghyunComputerAcademy            054-852-8048

  13. 시간 출력 형식
    $date = new DateTime();
    echo $date->format('H:i:s A'); 03:07:11 AM
    echo $date->format('h:i:s a'); 03:07:11 am

    H : 24시간 형식
    h : 12시간 형식
    i : 두 자리 분
    s : 두 자리 초
    a : am
    A : AM

  14. date() 함수 사용법
    date()함수는 현재 날짜와 시간 및 지정된 날짜와 시간을 특정 형식으로 포맷하여 출력하는데 사용됨.

    echo date('Y-m-d'); 2024-11-15

    Y:4자리 연도(예:2024)
    y:2자리 연도(예:24)
    m:2자리 월(예:01부터 12까지)
    n:1자리 월(예:1부터 12까지)
    d:2자리 일(예:01부터 31까지)
    j:1자리 일(예:1부터 31까지)
    l:요일 전체 이름(예:Sunday)
    D:요일 축약 이름(예:Sun)
    w:요일의 숫자 (0=일,1=월,....6=토)
    t:주어진 월의 일수(28부터 )

    ※ DateTime 객체를 사용하는 경우 format()메서드를 사용하고 date()함수는 타임스템프를 다룰때 사용.

  15. 주말(금요일,토요일,일요일)을 제외하고 지정된 날짜로 부터 몇일 후의 날짜를 계산하기
    function addWeekDays($startDate,$days) {
                $date = new DateTime($startDate);
                $daysAdded = 1;

                while($daysAdded < $days) {
                            $date->modify('+1 day');
                            $dayOfWeek = $date->format('N'); //N은 요일을 숫자로 반환(1=월,2=화, ...,7=일)

                            //금요일(5),토요일(6),일요일(7)을 제외
                            if($dayOfWeek < 5) {
                                        $daysAdded++;
                            }
                }
                return $date->format('Y-m-d');
    }

    $startDate = new DateTime(); //현재 날짜
    $startDate = $startDate->modify('next monday'); //다음주 월요일로 이동
    echo "다음주 월요일부터 20일 후의 날짜는 ". addWeekDays($startDate->format('Y-m-d'),20)."입니다.";

  16. 다음주 월요일부터 20일 후의 날짜는 2024-12-19입니다.

  17. 지정된 날짜가 기념일 목록에 있는지 판별

  18. function isAnniversary($date, $anniversaries) {
                 //기념일 목록에 해당 날짜가 있는지 확인
                return in_array($date, $anniversaries);
    }

    //기념일 목록을 배열로 정의 (형식:Y-m-d)
    $anniversaries = array(
    '2024-01-01',
    '2024-08-15',
    '2024-12-25'
    );

    $date = '2024-08-15';

    if(isAnniversary($dateToCheck, $anniversaries)) {
                echo $date. "는 기념일에 포함되어 있습니다.";
    } else {
                echo $date." 는 기념일에 포함되어있지 않습니다.";
    }

    2024-08-15는 기념일에 포함되어 있습니다.

  19. 두 날짜 사이에 존재하는 기념일의 횟수

  20. 지정된 날짜로부터 20일 후의 날짜를 계산
    단 금요일, 토요일, 일요일, 그리고 지정된 기념일을 제외하고


  21. function getFutureDate($startDate,$daysToAdd,$anniversaries) {
                $currentDate = new DateTime($startDate);
                $daysAdded=0;

                while($daysAdded < $daysToAdd-1) {
                            //하루를 더한다.
                            $currentDate->modify('+1 day');

                            //요일을 구한다.
                            $daysOfWeek = $currentDate->format('N'); //N은 월요일이 1, 화요일이 2, ... 금요일이 5, 토요일이 6, 일요일이 7

                            //금요일, 토요일, 일요일, 제외
                            if($daysOfWeek >= 5) {
                                        continue;
                            }

                            //지정된 기념일 제외
                            if(in_array($currentDate->format('Y-m-d'),$anniversaries)) {
                                        continue;
                            }

                            //제외 조건에 해당하지 않으면 일수를 증가 시키다.
                            $daysAdded++;
                }
                return $currentDate->format('Y-m-d');
    }

    //기념일을 배열로 정의 (형식: Y-m-d)
    $anniversaries = array(
                '2024-01-01',
                '2024-09-16',
                '2024-09-17',
                '2024-09-18'
    );

    //시작 날짜를 다음주 월요일로 설정
    $startDate = new DateTime('next Monday');
    $startDate = $startDate->format('Y-m-d');

    //더할 일수를 설정
    $daysToAdd = 20;

    //날짜 계산
    $endDate = getFutureDate($startDate,$daysToAdd,$anniversaries);

    //결과 출력
    echo $startDate."일 부터 20일째 되는 날은".$endDate."입니다.";

    2024-11-18일 부터 20일째 되는 날은2024-12-19입니다.

  22. 지정된 날짜가 기념일에 포함된 경우 다음 날짜를 지정된 날짜로 설정하는 방법

  23. //시작날짜 재 산정 (시작 날짜가 기념일에 포함된 경우 대비)
    function calStartDate($startDate,$anniversaries) {
                echo "함수 진입<br>";
                while(true) {
                            if(in_array($startDate->format('Y-m-d'),$anniversaries)) {
                                        $startDate->modify('+1 day');
                                        echo $startDate->format('Y-m-d').'<br>';
                            }
                            else {
                                        break;
                            }
                            echo $startDate->format('Y-m-d').'<br>';
                }
                return $startDate;
    }

    //기념일을 배열로 정의 (형식: Y-m-d)
    $anniversaries = array(
                '2024-01-01',
                '2024-08-26',
                '2024-08-27',
                '2024-09-16',
                '2024-09-17',
                '2024-09-18'
    );

    //시작 날짜를 다음주 월요일로 설정
    $startDate = new DateTime("next Monday");
    echo $startDate->format('Y-m-d').<br>; //다음주 월요일 날짜를 출력해봄.

    $startDate = calStartDate($startDate,$anniversaries); //시작 날짜 재 산정. 시작 날짜가 기념일에 포함된 경우를 대비해서 재 계산
    echo $startDate->format('Y-m-d');
    함수 진입
    2024-11-18
    재 계산된 시작 날짜는 : 2024-11-18