Working with
Dates and
Times prior to PHP 5.2 meant using
date()
,
strtotime()
, and other date related functions sometimes in convoluted ways to get to the date(s) you were looking for. Fortunately with PHP 5.2 the
DateTime()
class were introduced. (
DateTimeZone()
was introduced as well but is not covered here). It was further enhanced in PHP with additionally methods as well as the new
DatePeriod()
and
DateInterval()
classes.
Getting Started
Before we get started I will link to the relevant pages in the PHP manual for the classes that we will be using here. All of these require running PHP 5.2 or newer. Make sure you check your version of PHP before using any of this code.
Also, keep in mind that when using
DateTime()
, when passing a Unix Timestamp as a parameter requires prepending an
@
to the timestamp for it be recognized as a timestamp.
1
| $datetime = new DateTime('@123457890'); |
Getting the difference between two dates
1 2 3 4 5 6
| $datetime1 = new DateTime(); $datetime2 = new DateTime('2013-01-03 17:13:00'); $interval = $datetime1->diff($datetime2); $elapsed = $interval->format('%y years, %m months, %a days, %h hours, %i minutes, %S seconds'); echo $elapsed; |
See it in action If you want to eliminate any periods that have zero values you can use the snippet below to remove them.
1 2 3 4 5 6 7 8 9
| $elapsed = $interval->format('%y years, %m months, %d days, %h hours, %i minutes'); $elapsed = str_replace(array('0 years,', ' 0 months,', ' 0 days,', ' 0 hours,', ' 0 minutes,'), '', $elapsed); $elapsed = str_replace(array('1 years, ', ' 1 months, ', ' 1 days, ', ' 1 hours, ', ' 1 minutes'), array('1 year, ', '1 month, ', ' 1 day, ', ' 1 hour, ', ' 1 minute'), $elapsed); echo $elapsed; |
See it in action Birthdays/calculate age
1 2 3 4
| $today = new DateTime(); $birthdate = new DateTime("1973-04-18"); $interval = $today->diff($birthdate); echo $interval->format('%y years'); |
See it in action Adding period of time to a date
For PHP 5.3 or newer
1 2 3
| $datetime = new DateTime(); $datetime->add(new DateInterval('P6M')); echo $datetime->format('Y-m-d'); |
See it in action For PHP 5.2
1 2 3
| $datetime = new DateTime(); $datetime->modify('+6 months'); echo $datetime->format('Y-m-d'); |
See it in action Start date for a given week
1 2 3 4
| $start_date = new DateTime("2013-05-13"); $day_of_week = $start_date->format("w"); $start_date->modify('-' . $day_of_week . ' day'); echo $start_date->format('l, F jS, Y'); |
See it in action Looping through the days between two dates
For PHP 5.3 or newer
1 2 3 4 5 6 7 8 9
| $start = new DateTime('2013-02-01'); $end = new DateTime('2013-02-17'); $interval = new DateInterval('P1D'); $period = new DatePeriod($start, $interval, $end); foreach ($period as $dt) { echo $dt->format("l Y-m-d") . PHP_EOL; } |
See it in action An alternative way to do this using
DateInterval::createFromDateString()
1 2 3 4 5 6 7 8 9
| $start = new DateTime('2013-02-01'); $end = new DateTime('2013-02-17'); $interval = DateInterval::createFromDateString('1 day'); $period = new DatePeriod($start, $interval, $end); foreach ($period as $dt) { echo $dt->format("l Y-m-d") . PHP_EOL; } |
See it in action For PHP 5.2
1 2 3 4 5 6 7
| $start = new DateTime('2013-02-01'); $end = new DateTime('2013-02-17'); while ($start < = $end) { echo $start->format("m/d/Y") . PHP_EOL; $start->modify("+1 day"); } |
See it in action List all days in a month
1 2 3 4 5 6 7 8 9
| $start = new DateTime('first day of this month'); $end = new DateTime('first day of next month'); $interval = DateInterval::createFromDateString('1 day'); $period = new DatePeriod($start, $interval, $end); foreach ($period as $dt) { echo $dt->format("l Y-m-d") . PHP_EOL; } |
See it in action For PHP 5.2
1 2 3 4 5 6 7
| $start = new DateTime('2013-01-31'); $end = new DateTime('2013-02-05'); while($start < = $end) { echo $start->format("m/d/Y"). PHP_EOL; $start->modify("+1 day"); } |
See it in action Get first day of the month
1 2
| $datetime = new DateTime('first day of this month'); echo $datetime->format('jS, F Y'); |
See it in action Get last day of the month
1 2
| $datetime = new DateTime(); echo $datetime->format('Y-m-t'); |
See it in action 1 2
| $datetime = new DateTime('last day of this month'); echo $datetime->format('F jS'); |
See it in action Getting tomorrows date
1 2
| $datetime = new DateTime('tomorrow'); echo $datetime->format('Y-m-d'); |
See it in action Or alternatively
1 2 3
| $datetime = new DateTime(); $datetime->add(new DateInterval("P1D")); echo $datetime->format('Y-m-d'); |
See it in action For PHP 5.2
1 2 3
| $datetime = new DateTime(); $datetime->modify('+1 day'); echo $datetime->format('Y-m-d'); |
See it in action Compare dates & times
1 2 3 4 5 6 7 8 9 10
| $date1 = DateTime::createFromFormat('H:i', '08:00'); $date2 = new DateTime(); if ($date1 > $date2) { echo 'It is after 08:00'; } else { echo 'It is not after 08:00'; } |
See it in action
Artikel keren lainnya:
Belum ada tanggapan untuk "Working With Dates and Times in PHP"
Posting Komentar