Datetime Class

Add or Subtract Date Intervals

We can use the class DateInterval to add or subtract some interval in a DateTime object.

See the example below, where we are adding an interval of 7 days and printing a message on the screen:

$now = new DateTime();// empty argument returns the current date
$interval = new DateInterval('P7D');//this objet represents a 7 days interval
$lastDay = $now->add($interval); //this will return a DateTime object
$formatedLastDay = $lastDay->format('Y-m-d');//this method format the DateTime object and returns a String
echo "Samara says: Seven Days. You'll be happy on $formatedLastDay.";

This will output (running on Aug 1st, 2016):

Samara says: Seven Days. You'll be happy on 2016-08-08.

We can use the sub method in a similar way to subtract dates

$now->sub($interval);
echo "Samara says: Seven Days. You were happy last on $formatedLastDay.";

This will output (running on Aug 1st, 2016):

Samara says: Seven Days. You were happy last on 2016-07-25.

Create DateTime from custom format

PHP is able to parse a number of date formats. If you want to parse a non-standard format, or if you want your code to explicitly state the format to be used, then you can use the static DateTime::createFromFormat method:

Object oriented style

$format = "Y,m,d";
$time = "2009,2,26";
$date = DateTime::createFromFormat($format, $time);

Procedural style

$format = "Y,m,d";
$time = "2009,2,26";
$date = date_create_from_format($format, $time);

Create Immutable version of DateTime from Mutable prior PHP 5.6

To create \DateTimeImmutable in PHP 5.6+ use:

\DateTimeImmutable::createFromMutable($concrete);

Prior PHP 5.6 you can use:

\DateTimeImmutable::createFromFormat(\DateTime::ISO8601, $mutable->format(\DateTime::ISO8601), $mutable->getTimezone());

getTimestamp

getTimeStemp is a unix representation of a datetime object.

$date = new DateTime();
echo $date->getTimestamp(); 

this will out put an integer indication the seconds that have elapsed since 00:00:00 UTC, Thursday, 1 January 1970.

Printing DateTimes

PHP 4+ supplies a method, format that converts a DateTime object into a string with a desired format. According to PHP Manual, this is the object oriented function:

public string DateTime::format ( string $format )

The function date() takes one parameters - a format, which is a string

Format

The format is a string, and uses single characters to define the format:

  • Y: four digit representation of the year (eg: 2016)
  • y: two digit representation of the year (eg: 16)
  • m: month, as a number (01 to 12)
  • M: month, as three letters (Jan, Feb, Mar, etc)
  • j: day of the month, with no leading zeroes (1 to 31)
  • D: day of the week, as three letters (Mon, Tue, Wed, etc)
  • h: hour (12-hour format) (01 to 12)
  • H: hour (24-hour format) (00 to 23)
  • A: either AM or PM
  • i: minute, with leading zeroes (00 to 59)
  • s: second, with leading zeroes (00 to 59)
  • The complete list can be found here

Usage

These characters can be used in various combinations to display times in virtually any format. Here are some examples:

$date = new DateTime('2000-05-26T13:30:20'); /* Friday, May 26, 2000 at 1:30:20 PM */

$date->format("H:i");
/* Returns 13:30 */

$date->format("H i s");
/* Returns 13 30 20 */

$date->format("h:i:s A");
/* Returns 01:30:20 PM */

$date->format("j/m/Y");
/* Returns 26/05/2000 */

$date->format("D, M j 'y - h:i A");
/* Returns Fri, May 26 '00 - 01:30 PM */

Procedural

The procedural format is similar:

Object-Oriented

$date->format($format)

Procedural Equivalent

date_format($date, $format)

setDate

setDate sets the date in a DateTime object.

$date = new DateTime();
$date->setDate(2016, 7, 25);

this example sets the date to be the twenty-fifth of July, 2015, it will produce the following result:

2016-07-25 17:52:15.819442