phphttpdaterfc

The date/time format used in HTTP headers


Which RFC describes the format used for date/time in the modern time HTTP headers, like "Last-Modified" and "If-Modified-Since", and how to generate a date/time string in PHP according to such format?

Some sources point to RFC 2822, which, as indicated by DateTime class, is using D, d M Y H:i:s O format, but from my tests, this format produces +0000 instead of GMT at the end. I tried other timezone specifiers but none of them seems to put GMT at the end, the closest result I got was with UTC. However, as was shown by Firebug, all sites are using GMT in HTTP headers and not +0000 or UTC.

So what format is really used and how do I format date/time in the same way as other sites do?


Solution

  • As you can see here, Last-Modified header has datetimes in RFC2616 format.

    In section 14.29 Last-Modified you can see that date format should be:

    "Last-Modified" ":" HTTP-date
    

    An example of its use is

    Last-Modified: Tue, 15 Nov 1994 12:45:26 GMT
    

    Another quote from RFC2616 read more :

    All HTTP date/time stamps MUST be represented in Greenwich Mean Time (GMT), without exception.

    In PHP you can use format D, d M Y H:i:s T if you use function gmdate() which always returns datetime in GMT offset/timeszone:

    echo gmdate('D, d M Y H:i:s T');
    

    If you wish to use DateTime extension:

    $dt = new DateTime('UTC');
    #$dt = new DateTime('2013-01-01 12:00:00', new DateTimezone('UTC'));
    echo $dt->format(DateTimeInterface::RFC7231);
    # If before PHP 7.2: echo $dt->format('D, d M Y H:i:s \G\M\T');