PHP DATE 관련 내용
phpinfo(); echo phpversion();
Server PHP Version : 5.3.13p1
- DateTime() 객체 생성
$now = new DateTime()
$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)
- 날짜 및 시간 조작
$date = new DateTime('2024-5-24')
$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 ※설명 : 년 추가
- 날짜 차이 계산
$opening_day = new DateTime('1995-2-8'); //개원일
$current_day = new DateTime(); //오늘 날짜
$interval = $opening_day->diff($current_day) //날짜 차이
$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일 ※설명 : 흘러간 년, 월, 일 표시
- 천 단위 쉼표(콤마) 추가하기
$number = 123456.789;
$formated_number = number_format($number,2);
123,456.79
※설명 : number_format(숫자, 소수점 정밀도)
- 요일 출력하기
$date = new DateTime();
$date->format('l');
Friday ※설명 : 요일을 풀 네임으로 표시
$date->format('D');
Fri ※설명 : 요일을 약어로 표시
금
- 요일(한글) 출력하기
$date = new DateTime();
$dayOfWeek = $date->format('w'); ※설명 : 주중에 몇번째 요일인지 반환 (0:일, 1:월,....6:토)
$daysOfWeekKorean = array('일','월','화','수','목','금','토');
echo $daysOfWeekKorean[$dayOfWeek];
금
- 특정 날짜 유효성 검사
if(checkdate(5,30,2024)) {
echo "2024년 5월 30일은 유효한 날짜입니다.";
}
else {
echo "2024년 5월 30일은 유효하지 않은 날짜입니다.";
}
- 문자열을 타임스탬프로 변환
$timeStamp = strtotime('2024-8-14');
echo date('Y-m-d',$timeStamp);
2024-08-14
- 문자열 반복
$spaces = str_repeat(" ",12);
$text_with_spaces = "SonghyunComputerAcademy".$spaces."054-852-8048";
echo $text_with_spaces;
SonghyunComputerAcademy 054-852-8048
- 시간 출력 형식
$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
- 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()함수는 타임스템프를 다룰때 사용.
- 주말(금요일,토요일,일요일)을 제외하고 지정된 날짜로 부터 몇일 후의 날짜를 계산하기
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)."입니다.";
다음주 월요일부터 20일 후의 날짜는 2024-12-19입니다.
- 지정된 날짜가 기념일 목록에 있는지 판별
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는 기념일에 포함되어 있습니다.
- 두 날짜 사이에 존재하는 기념일의 횟수
- 지정된 날짜로부터 20일 후의 날짜를 계산
단 금요일, 토요일, 일요일, 그리고 지정된 기념일을 제외하고
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입니다.
- 지정된 날짜가 기념일에 포함된 경우 다음 날짜를 지정된 날짜로 설정하는 방법
//시작날짜 재 산정 (시작 날짜가 기념일에 포함된 경우 대비)
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