# The DateTimeInterface interface

&reftitle.intro;

DateTimeInterface was created so that parameter, return, or property type declarations may accept either `DateTimeImmutable` or `DateTime` as a value. It is not possible to implement this interface with userland classes.

Common constants that allow for formatting `DateTimeImmutable` or `DateTime` objects through `DateTimeImmutable::format` and `DateTime::format` are also defined on this interface.

&reftitle.interfacesynopsis;

         DateTimeInterface

        &Constants;

         public
         const
         string
         DateTimeInterface::ATOM
         "Y-m-d\\TH:i:sP"

         public
         const
         string
         DateTimeInterface::COOKIE
         "l, d-M-Y H:i:s T"

         public
         const
         string
         DateTimeInterface::ISO8601
         "Y-m-d\\TH:i:sO"

         public
         const
         string
         DateTimeInterface::ISO8601_EXPANDED
         "X-m-d\\TH:i:sP"

         public
         const
         string
         DateTimeInterface::RFC822
         "D, d M y H:i:s O"

         public
         const
         string
         DateTimeInterface::RFC850
         "l, d-M-y H:i:s T"

         public
         const
         string
         DateTimeInterface::RFC1036
         "D, d M y H:i:s O"

         public
         const
         string
         DateTimeInterface::RFC1123
         "D, d M Y H:i:s O"

         public
         const
         string
         DateTimeInterface::RFC7231
         "D, d M Y H:i:s \\G\\M\\T"

         public
         const
         string
         DateTimeInterface::RFC2822
         "D, d M Y H:i:s O"

         public
         const
         string
         DateTimeInterface::RFC3339
         "Y-m-d\\TH:i:sP"

         public
         const
         string
         DateTimeInterface::RFC3339_EXTENDED
         "Y-m-d\\TH:i:s.vP"

         public
         const
         string
         DateTimeInterface::RSS
         "D, d M Y H:i:s O"

         public
         const
         string
         DateTimeInterface::W3C
         "Y-m-d\\TH:i:sP"

        &Methods;

&reftitle.constants;

`DateTimeInterface::ATOM` `string`

`DATE_ATOM`

- Atom (example: 2005-08-15T15:52:01+00:00)

`DateTimeInterface::COOKIE` `string`

`DATE_COOKIE`

- HTTP Cookies (example: Monday, 15-Aug-2005 15:52:01 UTC)

`DateTimeInterface::ISO8601` `string`

`DATE_ISO8601`

- ISO-8601 (example: 2005-08-15T15:52:01+0000)

  This format is not compatible with ISO-8601, but is left this way for backward compatibility reasons. Use `DateTimeInterface::ISO8601_EXPANDED`, `DateTimeInterface::ATOM` for compatibility with ISO-8601 instead. (ref ISO8601:2004 section 4.3.3 clause d)

`DateTimeInterface::ISO8601_EXPANDED` `string`

`DATE_ISO8601_EXPANDED`

- ISO-8601 Expanded (example: +10191-07-26T08:59:52+01:00)

  This format allows for year ranges outside of ISO-8601's normal range of `0000`-`9999` by always including a sign character. It also ensures that the timezone part (`+01:00`) is compatible with ISO-8601.

`DateTimeInterface::RFC822` `string`

`DATE_RFC822`

- RFC 822 (example: Mon, 15 Aug 05 15:52:01 +0000)

`DateTimeInterface::RFC850` `string`

`DATE_RFC850`

- RFC 850 (example: Monday, 15-Aug-05 15:52:01 UTC)

`DateTimeInterface::RFC1036` `string`

`DATE_RFC1036`

- RFC 1036 (example: Mon, 15 Aug 05 15:52:01 +0000)

`DateTimeInterface::RFC1123` `string`

`DATE_RFC1123`

- RFC 1123 (example: Mon, 15 Aug 2005 15:52:01 +0000)

`DateTimeInterface::RFC7231` `string`

`DATE_RFC7231`

- RFC 7231 (since PHP 7.0.19 and 7.1.5) (example: Sat, 30 Apr 2016 17:52:13 GMT)

`DateTimeInterface::RFC2822` `string`

`DATE_RFC2822`

- RFC 2822 (example: Mon, 15 Aug 2005 15:52:01 +0000)

`DateTimeInterface::RFC3339` `string`

`DATE_RFC3339`

- Same as `DATE_ATOM`

`DateTimeInterface::RFC3339_EXTENDED` `string`

`DATE_RFC3339_EXTENDED`

- RFC 3339 EXTENDED format (example: 2005-08-15T15:52:01.000+00:00)

`DateTimeInterface::RSS` `string`

`DATE_RSS`

- RSS (example: Mon, 15 Aug 2005 15:52:01 +0000)

`DateTimeInterface::W3C` `string`

`DATE_W3C`

- World Wide Web Consortium (example: 2005-08-15T15:52:01+00:00)

&reftitle.changelog;

&Version; | &Description;
8.4.0 | The class constants are now typed.
8.2.0 | The constant `DateTimeInterface::ISO8601_EXPANDED` was added.
7.2.0 | The class constants of `DateTime` are now defined on DateTimeInterface.

&reference.datetime.entities.datetimeinterface;