<?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 객체를 비교할 수 있다. 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'