반응형
안녕하세요 토스트데브입니다.
앞서 date()와 strtotime() 등의 기본 날짜/시간 함수들을 배웠다면, 이번 글에서는 더 강력하고 유연한 DateTime 클래스를 사용한 날짜 처리 방법을 알아보겠습니다.
DateTime은 PHP 5.2 이후부터 도입된 객체 지향 기반 날짜/시간 처리 클래스로, 날짜 비교, 차이 계산, 시간 조정, 포맷 변환 등을 더 직관적이고 강력하게 할 수 있습니다.
🕓 DateTime 객체 생성
✅ 현재 시각 기준 객체 생성
$now = new DateTime();
echo $now->format('Y-m-d H:i:s');
// 예: 2025-09-02 15:00:00
✅ 특정 날짜로 생성
$date = new DateTime('2025-12-25');
echo $date->format('Y-m-d');
// 출력: 2025-12-25
🌍 시간대 설정
✅ 타임존을 지정한 DateTime 객체
$seoul = new DateTime("now", new DateTimeZone("Asia/Seoul"));
echo $seoul->format('Y-m-d H:i:s');
다양한 타임존 ID는 DateTimeZone::listIdentifiers()로 확인 가능
➕ 날짜 더하기 / 빼기
✅ add() / sub() + DateInterval
$dt = new DateTime('2025-01-01');
$dt->add(new DateInterval('P10D')); // 10일 더하기
echo $dt->format('Y-m-d'); // 2025-01-11
$dt->sub(new DateInterval('P1M')); // 1달 빼기
echo $dt->format('Y-m-d'); // 2024-12-11
P는 Period의 약자, ISO 8601 형식
예:
- P1D : 1일
- P2M : 2달
- P3Y : 3년
- P1Y2M10D : 1년 2달 10일
🔁 날짜 차이 계산
✅ diff() – 두 날짜 간 차이 구하기
$start = new DateTime('2025-01-01');
$end = new DateTime('2025-12-31');
$interval = $start->diff($end);
echo $interval->format('%m개월 %d일'); // 출력: 11개월 30일
결과는 DateInterval 객체로 반환되며, %y, %m, %d 등으로 포맷 가능
📆 반복 날짜 – DatePeriod
✅ 주차 반복, 월별 반복 등 일정 패턴 생성
$start = new DateTime('2025-09-01');
$end = new DateTime('2025-10-01');
$interval = new DateInterval('P1W');
$period = new DatePeriod($start, $interval, $end);
foreach ($period as $date) {
echo $date->format('Y-m-d') . "\n";
}
// 출력: 2025-09-01, 2025-09-08, ...
DatePeriod는 일정한 주기마다 반복되는 날짜 리스트 생성에 유용
💡 실전 팁
- DateTime은 불변(immutable) 객체가 아님 → add()나 sub() 시 원본이 변경됨
→ 변경 없이 새 인스턴스를 원한다면 DateTimeImmutable 사용 - diff()로 비교할 때 두 날짜의 순서에 따라 결과 부호가 달라질 수 있음
- DateInterval의 기간 포맷은 ISO 8601 형식만 가능 (예: P1Y2M10D)
✅ 마무리
DateTime, DateInterval, DatePeriod를 활용하면 단순 날짜 출력뿐만 아니라, 복잡한 날짜 계산, 기간 처리, 반복 스케줄 생성까지 손쉽게 구현할 수 있습니다.
기존 date() 기반 함수보다 객체 지향적이며 확장성 있는 코드 작성이 가능하므로, PHP 날짜 처리의 핵심 도구로 꼭 익혀두세요!
지금까지 토스트데브였습니다 😊
#PHP, #DateTime, #날짜계산, #DateInterval, #DatePeriod, #PHP날짜, #시간처리, #웹개발, #PHP기초, #날짜함수
반응형
'Programming > PHP' 카테고리의 다른 글
[PHP] #34 PHP 파일 업로드, 권한 설정, 복사/이동 완벽 정리 (0) | 2025.09.07 |
---|---|
[PHP] #33 PHP 파일 함수 정리: 파일 읽기, 쓰기, 삭제까지 완벽 마스터! (0) | 2025.09.06 |
[PHP] #31 PHP 날짜/시간 함수 완벽 정리: date, time, strtotime, mktime 총정리 (2) | 2025.09.04 |
[PHP] #30 PHP 수학함수, PHP 수학 함수 심화편: 삼각함수부터 로그, 지수 함수까지 (6) | 2025.09.03 |
[PHP] #29 PHP 수학함수, PHP 수학 함수 총정리: 반올림, 난수, 최소/최대값까지 한 번에! (2) | 2025.09.02 |