【问题标题】:date() and strftime() not same on windows and Linux. Why?date() 和 strftime() 在 Windows 和 Linux 上不同。为什么?
【发布时间】:2011-01-03 07:17:22
【问题描述】:

为什么 Windows 不支持 date()strftime() 的某些选项?我认为任何与 date 相关的东西都是每个系统都应该支持的。是因为 date 内部存储的方式吗?

【问题讨论】:

  • 你指的是什么选项/参数?
  • 不幸的是,这是 PHP 在将其用作跨平台语言方面的一个严重弱点。如果你编写一个便携/可销售的产品,这些小问题真的会搞砸你。
  • @Alexn:date() 和 strftime() 有许多选项可以用来表示不同格式的日期。但并非所有选项都受 Windows 支持。

标签: php date cross-platform strftime


【解决方案1】:

manual on date() 指出了两个不同点:

  • 在 PHP 5.1.0 之前的 Windows 上,时间戳的范围是 1970 到 2038。
  • 根据用户提供的评论,微秒开关不能在 Windows 上使用。

对于 strftime():

您的 C 库可能不支持所有转换说明符,在这种情况下,PHP 的 strftime() 将不支持它们。此外,并非所有平台都支持负时间戳,因此您的日期范围可能会限制为不早于 Unix 纪元。这意味着 %e、%T、%R 和 %D(可能还有其他)——以及 1970 年 1 月 1 日之前的日期——将无法在 Windows、某些 Linux 发行版和其他一些操作系统上运行。对于 Windows 系统,可以在 » MSDN 中找到支持的转换说明符的完整概述。

这就是你的意思吗?好吧,那里已经解释了原因,不支持负时间戳。我认为对此无能为力。

如果这给您带来问题,您可能想要使用像 Zend_Date 这样的库。

【讨论】:

    【解决方案2】:

    这是因为datestrftime 只是底层系统函数的薄包装,因此它们只接受操作系统支持的那些函数。

    http://linux.die.net/man/3/strftime
    http://msdn.microsoft.com/en-us/library/fe06s4ak%28VS.71%29.aspx

    【讨论】:

      猜你喜欢
      • 2012-11-11
      • 2019-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多