# The DateTimeInterface interface

(PHP 5 >= 5.5.0, PHP 7)

## Introduction

DateTimeInterface is meant so that both DateTime and DateTimeImmutable can be type hinted for. It is not possible to implement this interface with userland classes.

## Class synopsis

DateTimeInterface {
/* Constants */
const string ATOM = "Y-m-d\TH:i:sP" ;
const string COOKIE = "l, d-M-Y H:i:s T" ;
const string ISO8601 = "Y-m-d\TH:i:sO" ;
const string RFC822 = "D, d M y H:i:s O" ;
const string RFC850 = "l, d-M-y H:i:s T" ;
const string RFC1036 = "D, d M y H:i:s O" ;
const string RFC1123 = "D, d M Y H:i:s O" ;
const string RFC7231 = "D, d M Y H:i:s \G\M\T" ;
const string RFC2822 = "D, d M Y H:i:s O" ;
const string RFC3339 = "Y-m-d\TH:i:sP" ;
const string RFC3339_EXTENDED = "Y-m-d\TH:i:s.vP" ;
const string RSS = "D, d M Y H:i:s O" ;
const string W3C = "Y-m-d\TH:i:sP" ;
/* Methods */
public diff ( DateTimeInterface `$datetime2` [, bool `$absolute` = `FALSE` ] ) : DateInterval
public format ( string `$format` ) : string
public getOffset ( void ) : int
public getTimestamp ( void ) : int
public getTimezone ( void ) : DateTimeZone
public __wakeup ( void )
}

## Predefined Constants

`DateTimeInterface::ATOM`
`DATE_ATOM`
  Atom (example: 2005-08-15T15:52:01+00:00)
`DateTimeInterface::COOKIE`
`DATE_COOKIE`
  HTTP Cookies (example: Monday, 15-Aug-2005 15:52:01 UTC)
`DateTimeInterface::ISO8601`
`DATE_ISO8601`
  ISO-8601 (example: 2005-08-15T15:52:01+0000)

  > Note: This format is not compatible with ISO-8601, but is left this way for backward compatibility reasons. Use `DateTime::ATOM` or `DATE_ATOM` for compatibility with ISO-8601 instead.

`DateTimeInterface::RFC822`
`DATE_RFC822`
  RFC 822 (example: Mon, 15 Aug 05 15:52:01 +0000)
`DateTimeInterface::RFC850`
`DATE_RFC850`
  RFC 850 (example: Monday, 15-Aug-05 15:52:01 UTC)
`DateTimeInterface::RFC1036`
`DATE_RFC1036`
  RFC 1036 (example: Mon, 15 Aug 05 15:52:01 +0000)
`DateTimeInterface::RFC1123`
`DATE_RFC1123`
  RFC 1123 (example: Mon, 15 Aug 2005 15:52:01 +0000)
`DateTimeInterface::RFC7231`
`DATE_RFC7231`
  RFC 7231 (since PHP 7.0.19 and 7.1.5) (example: Sat, 30 Apr 2016 17:52:13 GMT)
`DateTimeInterface::RFC2822`
`DATE_RFC2822`
  RFC 2822 (example: Mon, 15 Aug 2005 15:52:01 +0000)
`DateTimeInterface::RFC3339`
`DATE_RFC3339`
  Same as `DATE_ATOM` (since PHP 5.1.3)
`DateTimeInterface::RFC3339_EXTENDED`
`DATE_RFC3339_EXTENDED`
  RFC 3339 EXTENDED format (since PHP 7.0.0) (example: 2005-08-15T15:52:01.000+00:00)
`DateTimeInterface::RSS`
`DATE_RSS`
  RSS (example: Mon, 15 Aug 2005 15:52:01 +0000)
`DateTimeInterface::W3C`
`DATE_W3C`
  World Wide Web Consortium (example: 2005-08-15T15:52:01+00:00)

## Changelog

Version | Description
--- | ---
7.2.0 | The class constants of DateTime are now defined on DateTimeInterface.
5.5.8 | Trying to implement DateTimeInterface raises a fatal error now. Formerly implementing the interface didn't raise an error, but the behavior was erroneous.

## Table of Contents

- DateTime::diff — Returns the difference between two DateTime objects
- DateTime::format — Returns date formatted according to given format
- DateTime::getOffset — Returns the timezone offset
- DateTime::getTimestamp — Gets the Unix timestamp
- DateTime::getTimezone — Return time zone relative to given DateTime
- DateTime::__wakeup — The __wakeup handler