# The DateTime class

(PHP 5 >= 5.2.0, PHP 7)

## Introduction

This class behaves the same as DateTimeImmutable except objects are modified itself when modification methods such as DateTime::modify() are called.

## Class synopsis

DateTime implements DateTimeInterface {
/* Inherited constants */
const string DateTimeInterface::ATOM = "Y-m-d\TH:i:sP" ;
const string DateTimeInterface::COOKIE = "l, d-M-Y H:i:s T" ;
const string DateTimeInterface::ISO8601 = "Y-m-d\TH:i:sO" ;
const string DateTimeInterface::RFC822 = "D, d M y H:i:s O" ;
const string DateTimeInterface::RFC850 = "l, d-M-y H:i:s T" ;
const string DateTimeInterface::RFC1036 = "D, d M y H:i:s O" ;
const string DateTimeInterface::RFC1123 = "D, d M Y H:i:s O" ;
const string DateTimeInterface::RFC7231 = "D, d M Y H:i:s \G\M\T" ;
const string DateTimeInterface::RFC2822 = "D, d M Y H:i:s O" ;
const string DateTimeInterface::RFC3339 = "Y-m-d\TH:i:sP" ;
const string DateTimeInterface::RFC3339_EXTENDED = "Y-m-d\TH:i:s.vP" ;
const string DateTimeInterface::RSS = "D, d M Y H:i:s O" ;
const string DateTimeInterface::W3C = "Y-m-d\TH:i:sP" ;
/* Methods */
public __construct ([ string `$datetime` = "now" [, DateTimeZone `$timezone` = `NULL` ]] )
public add ( DateInterval `$interval` ) : DateTime
public static createFromFormat ( string `$format` , string `$datetime` [, DateTimeZone `$timezone` ] ) : DateTime|false
public static createFromImmutable ( DateTimeImmutable `$object` ) : DateTime
public static getLastErrors ( ) : array
public modify ( string `$modifier` ) : DateTime
public static __set_state ( array `$array` ) : DateTime
public setDate ( int `$year` , int `$month` , int `$day` ) : DateTime
public setISODate ( int `$year` , int `$week` [, int `$dayOfWeek` = 1 ] ) : DateTime
public setTime ( int `$hour` , int `$minute` [, int `$second` = 0 [, int `$microsecond` = 0 ]] ) : DateTime
public setTimestamp ( int `$timestamp` ) : DateTime
public setTimezone ( DateTimeZone `$timezone` ) : DateTime
public sub ( DateInterval `$interval` ) : DateTime
public diff ( DateTimeInterface `$targetObject` [, bool `$absolute` = `FALSE` ] ) : DateInterval|false
public format ( string `$format` ) : string|false
public getOffset ( ) : int|false
public getTimestamp ( ) : int
public getTimezone ( ) : DateTimeZone|false
public __wakeup ( )
}

## Changelog

Version | Description
--- | ---
7.2.0 | The class constants of DateTime are now defined on DateTimeInterface.
7.0.0 | Added constants: DATE_RFC3339_EXTENDED and DateTime::RFC3339_EXTENDED.
5.5.0 | The class now implements DateTimeInterface.
5.4.24 | The COOKIE constant was changed to reflect RFC 1036 using a four digit year rather than a two digit year (RFC 850) as prior versions.
5.2.2 | DateTime object comparison with the comparison operators changed to work as expected. Previously, all DateTime objects were considered equal (using `==`).

## Table of Contents

- DateTime::add — Adds an amount of days, months, years, hours, minutes and seconds to a DateTime object
- DateTime::__construct — Returns new DateTime object
- DateTime::createFromFormat — Parses a time string according to a specified format
- DateTime::createFromImmutable — Returns new DateTime object encapsulating the given DateTimeImmutable object
- DateTime::getLastErrors — Returns the warnings and errors
- DateTime::modify — Alters the timestamp
- DateTime::__set_state — The __set_state handler
- DateTime::setDate — Sets the date
- DateTime::setISODate — Sets the ISO date
- DateTime::setTime — Sets the time
- DateTime::setTimestamp — Sets the date and time based on an Unix timestamp
- DateTime::setTimezone — Sets the time zone for the DateTime object
- DateTime::sub — Subtracts an amount of days, months, years, hours, minutes and seconds from a DateTime object