在 PHP 中解析 HTTP 'Last-Modified' 日期字符串

问题描述 投票:0回答:3

我正在使用

FileAPI
来获取文件的 HTTP 标头上次修改时间,该文件返回以下字符串:

Fri Oct 25 2013 12:04:10 GMT+0100 (GMT Daylight Time)

然后将其发布到 PHP,我需要将其转换为合理的内容,最好是时间戳。在您提出建议之前,

strtotime()
会返回
FALSE

似乎在任何地方都找不到任何答案。

php date date-formatting last-modified
3个回答
7
投票

幸运的是,从5.3.0开始就有了

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

1
投票

好吧,如果问题出在括号内的字符串,您可以将其子串到第一个字符串并使用

strtotime
,如@Marcell 在评论中建议的那样。


0
投票

这是一个迟到的答案,但接受的答案是基于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 编写的格式不同。

这个答案应该被视为补充。

© www.soinside.com 2019 - 2024. All rights reserved.