我正在使用
FileAPI
来获取文件的 HTTP 标头上次修改时间,该文件返回以下字符串:
Fri Oct 25 2013 12:04:10 GMT+0100 (GMT Daylight Time)
然后将其发布到 PHP,我需要将其转换为合理的内容,最好是时间戳。在您提出建议之前,
strtotime()
会返回FALSE
。
似乎在任何地方都找不到任何答案。
DateTime::createFromFormat()
。尽管它无法解析尾随信息,但至少可以使用 +
说明符忽略它。您不需要该信息来创建时间戳,因为您已经拥有机器可解析的GMT+0100
。
示例:
$str = "Fri Oct 25 2013 12:04:10 GMT+0100 (GMT Daylight Time)";
$fmt = 'D M d Y H:i:s O+';
$datetime = DateTime::createFromFormat($fmt, $str);
echo $datetime->getTimestamp();
输出:
1382699050
好吧,如果问题出在括号内的字符串,您可以将其子串到第一个字符串并使用
strtotime
,如@Marcell 在评论中建议的那样。
这是一个迟到的答案,但接受的答案是基于OP的问题,而不是基于Last-Modified
标题使用的
real格式。星期几后面少了一个逗号 (
,
),数据顺序不正确。
Last-Modified 标头的官方 格式为:
Last-Modified: <day-name>, <day> <month> <year> <hour>:<minute>:<second> GMT
因此,您从标头获取的日期格式应该不同,并且要使用的格式已经存在于DateTime接口中,如
DateTimeInterface::RFC7231
:
$str = "Fri,25 Oct 2013 12:04:10 GMT";
$datetime = DateTime::createFromFormat($fmt, $str);
echo $datetime->getTimestamp();
我知道这与 OP 要求的不同,但 HTTP 协议的格式与 OP 编写的格式不同。
这个答案应该被视为补充。