PHP DateTime 간단 사용법

DateTime 생성

DateTimeString으로 생성

DateTime 객체의 생성자는 string $time, DateTimeZone $timezone 객체를 파라미터로 받는다..

1
2
3
4
5
6
<?php 
$dateTime = new DateTime(); // 1번째 파라미터인 string $time의 기본값은 'now'로 지정되어 있음.
$dateTime = new DateTime('2017-09-18'); // '2017-09-18'로 DateTime 객체 생성.
$dateTime = new DateTime('2017/10/01'); // '2017/10/01'로 DateTime 객체 생성.
$dateTime = new DateTime('20171005', new DateTimeZone('Asia/Seoul'));
// '20171005', 그리고 'Asia/Seoul' 타임존으로 DateTime 객체 생성.

UnixTimestamp로 생성

UnixTimestamp로도 DateTime 객체 생성이 가능하다. 다만 이 경우, DateTime의 2번째 파라미터인 DateTimeZone $timezone 객체를 넣더라도 타임존이 적용되지 않으므로 DateTime 객체 생성 후 DateTime::setTimezone() 메서드를 사용해서 알맞은 타임존을 넣어줘야 한다.

1
2
3
<?php 
$dateTime = new DateTime('@1502667191');
$dateTime->setTimezone(new DateTimeZone('Asia/Seoul'));

DateTime 지정 : setDate(), setTime(), setTimestamp()

DateTime::setDate() 메서드를 통해 연월일을 지정하거나, DateTime::setTime() 메서드를 통해 시분초(심지어 마이크로초까지 지정 가능)를 지정하거나, DateTime::setTimestamp() 메서드를 통해 UnixTimestamp를 지정할 수도 있다.

1
2
3
4
5
<?php 
$dateTime = new DateTime('2017-07-10', new DateTimeZone('Asia/Seoul'));
$dateTime->setDate(2017, 8, 30);
$dateTime->setTime(16, 40, 15);
echo $dateTime->format('Y-m-d H:i:s'); // '2017-08-30 16:40:15'

DateTime 출력 : format()

DateTime::format() 메서드를 사용해서 지정한 문자열 포맷 기반으로 출력한다.

1
2
3
4
5
6
7
<?php 
$dateTime = new DateTime('@1502667191');
$dateTime->setTimezone(new DateTimeZone('Asia/Seoul'));
echo $dateTime->format(DateTime::ATOM); // '2017-08-14T08:33:11+09:00'
echo $dateTime->format(DateTime::RSS); // 'Mon, 14 Aug 2017 08:33:11 +0900'
echo $dateTime->format('Y-m-d H:i:s'); // '2017-08-14 08:33:11'
echo $dateTime->format('Y/m/d A H:i:s:u'); // '2017/08/14 AM 08:33:11:000000'

DateTime::format()에 사용되는 문자열 포맷은 여기를 참고할 것.

DateTime 비교 : diff()

두 개의 DateTime 객체를 비교할 수 있다. DateTime::diff() 메서드를 사용해 비교하며, 파라미터로 비교할 DateTime객체를 넣어주면 된다. 비교 결과로 DateInterval 객체를 반환하며, DateInterval::format() 메서드를 사용해 특정 포맷으로 출력 가능하다(객체의 멤버변수에 접근하여 값을 바로 가져오는 것도 가능).

1
2
3
4
5
<?php 
$dateTime1 = new DateTime('2017-10-10', new DateTimeZone('Asia/Seoul'));
$dateTime2 = new DateTime('2017-11-16', new DateTimeZone('Asia/Seoul'));
$dateInterval = $dateTime1->diff($dateTime2);
echo $dateInterval->format('%m month %d days'); // '1 month 6 days'

DateInterval::format()에 사용되는 문자열 포맷은 여기를 참고할 것.

DateTime 연산

연산에 앞서 필요한 DateInterval 객체 생성

DateTime 객체의 연산에 앞서 필요한 DateInterval 객체를 생성해야 한다. 생성자는 단순하게도, string $interval_spec 하나 뿐이다. 포맷에 맞는 문자열이 들어가야 하므로, 여기를 참고할 것.

1
2
3
4
<?php 
$dateInterval = new DateInterval('P1Y3M10DT5H30M15S');
echo $dateInterval->format('%y years %m month %d days %h hours %i minutes %s seconds');
// '1 years 3 month 10 days 5 hours 30 minutes 15 seconds'

DateTime에 특정 기간 더하기 : add()

DateTime::add()를 이용해서 DateTime 객체에 특정 기간만큼 더할 수 있다.

1
2
3
4
<?php 
$dateTime = new DateTime('2017-10-10', new DateTimeZone('Asia/Seoul'));
$dateTime->add(new DateInterval('P1M5D'));
echo $dateTime->format('Y-m-d'); // '2017-11-15'

DateTime에 특정 기간 빼기 : sub()

DateTime::sub()를 이용해서 DateTime 객체에 특정 기간만큼 뺄 수 있다.

1
2
3
4
<?php 
$dateTime = new DateTime('2017-10-10', new DateTimeZone('Asia/Seoul'));
$dateTime->sub(new DateInterval('P1M5D'));
echo $dateTime->format('Y-m-d'); // '2017-09-05'