【问题标题】:php 32bit date parsing for dates before 13Dec 1901php 32 位日期解析为 1901 年 12 月 13 日之前的日期
【发布时间】:2011-04-11 15:29:27
【问题描述】:

我很高兴在我的开发机器上使用strtotime() 来解析日期,其中一些是在 1800 年代,一个极端的例子是在 1500 年代。

但是我的开发机器是64位的,服务器是32位的。在 32 位机器上,1901 年 12 月 13 日星期五 20:45:54 UTC 之前的任何日期都超出范围(请参阅 strtotime 上的注释)。

我很高兴为此编写一些自定义代码,但我想我会问是否有任何 php 内置函数可以管理这个。日期采用 ISO 8601 格式。

服务器的价值在于 centos 5.4 和 php 5.2.10

【问题讨论】:

  • Aww... 如果是 PHP 5.3,您可以使用 DateTime::createFromFormat,我认为这是解决问题的最佳方法。你的日期是什么格式的?
  • 1901-12-12T05:00:00Z 例如。
  • 同意@Pekka....你有机会升级你的PHP吗? 5.2 不再受支持,所以你真的应该升级到 5.3。

标签: php datetime 32-bit


【解决方案1】:

例如 1901-12-12T05:00:00Z

我现在无法对其进行测试,但DateTime's constructor 也许能够接受您的格式而不需要createFromFormat。我真的无法从文档中分辨出来。

试试

try {
    $date = new DateTime('1901-12-12T05:00:00Z');
} catch (Exception $e) {
    echo "Arggh! ".$e->getMessage();
    die();
}

echo $date->format('Y-m-d H:i:s');

看看会发生什么,特别注意它是否正确理解Z(即使其成为UTC时间)。

DateTime 在任何系统内部都使用 64 位数字,并且没有范围限制。

如前所述,从 5.3 开始,您将能够使用 createFromFormat,它可以解析由 date() 的占位符之一表示的任何日期。这是最佳方式,因为您强制它解析特定模式,而不是猜测它。

【讨论】:

  • 谢谢我有代码在本地工作。如果它在部署后工作,将给出绿色的大勾号。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多