【问题标题】:Parsing HTTP 'Last-Modified' Date string in PHP在 PHP 中解析 HTTP 'Last-Modified' 日期字符串
【发布时间】:2013-12-06 16:30:18
【问题描述】:

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

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

然后将其发布到 PHP,我需要将其转换为合理的东西,最好是时间戳。在您提出建议之前,strtotime() 返回FALSE

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

【问题讨论】:

  • echo strtotime('Fri Oct 25 2013 12:04:10 GMT+0100'); => 1382699050strtotime() 能够解析这种日期格式...
  • 如上包含(GMT夏令时)的字符串?这是完整的字符串。
  • @MarcellFülöp 3v4l.org/CStMB
  • 谢谢@hek2mgl - 这解释了我看到的问题 - 这里的php版本是5.3.3。请将此添加为答案,以便我接受 - 我认为这是对遇到此问题的其他人最有用的解释。

标签: php date date-formatting last-modified


【解决方案1】:

幸运的是,从 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

【讨论】:

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

好吧,如果问题是括号内的字符串,您可以将其子串到第一个字符串,然后按照 cmets 中的 @Marcell 建议使用 strtotime

【讨论】:

    猜你喜欢
    • 2010-12-28
    • 1970-01-01
    • 1970-01-01
    • 2013-07-06
    • 2010-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-11
    相关资源
    最近更新 更多