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

4

我正在使用 FileAPI 获取文件的 HTTP-header Last-Modified 时间,返回的字符串如下:

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

这段文本首先被提交到PHP,我需要把它转换成有意义的东西,最好是一个时间戳。在你建议使用strtotime()之前,请注意,strtotime()会返回FALSE

似乎无法在任何地方找到答案。


6
echo strtotime('Fri Oct 25 2013 12:04:10 GMT+0100'); => 1382699050strtotime() 函数能够解析这个日期格式。 - marekful
1
包括上述 (GMT 夏令时) 的字符串?那就是完整的字符串。 - user1832464
1
@MarcellFülöp http://3v4l.org/CStMB - hek2mgl
谢谢@hek2mgl - 这解释了我看到的问题 - 这里的php版本是5.3.3。请将其作为答案添加,以便我可以接受 - 我认为这对于任何遇到此问题的人来说都是最有用的解释。 - user1832464
2个回答

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

谢谢,虽然在我删除了最初的 .* 之前,正则表达式无法匹配。 - user1832464
1
一旦您从 preg_replace 调用中获得了 $str,难道您不能只使用“strtotime($str)”来获取时间戳吗?我正在这样做,然后使用“date('Y-m-d H:i:s', $timestamp)”为 mysql 查询格式化日期,没有问题(到目前为止 :))。此外,可以将此问题重新措辞以将“格式化”替换为“解析”吗?格式化听起来像是将数据转换为字符串,但实际上您正在尝试将字符串头解析为值。 - Neek
@Neek preg_replace() 不是必要的。请查看我的更新。当我回答这个问题时,我应该更仔细地阅读文档。 ;) 你对问题的标题是正确的。我已经改变了这个。 - hek2mgl
"strtotime() 只能解析字符串到 PHP 版本 5.2.17" - 这是不正确的。我正在使用 PHP 5.6.20,而且我可以很好地使用它:strtotime("Tue, 15 Nov 1994 12:45:26 GMT"); - Dai
我明白了。这是一个旧答案,我不知道我从哪里得到的。 - hek2mgl

1

如果问题在括号内的字符串,你可以将它子串到第一个,然后像@Marcell在评论中建议的那样使用strtotime


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接