为什么windows上的strftime()返回false? (我没有使用%e)

时间:2012-09-11 03:06:25

标签: php windows-7-x64

这是我的代码:

var_dump(strftime("%m-%d-%Y %l:%M:%S", time()));
echo "<br />";
var_dump(strftime("%Y-%d-%m %H:%M:%S", time()));

第一行返回false,第三行返回预期字符串'2012-10-09 23:03:18'(长度= 19)

为什么第一行返回false?

我正在运行Windows 7x64并使用相当默认的设置进行操作。

2 个答案:

答案 0 :(得分:5)

如果第一行不起作用但第二行不起作用,那么原因显然是因为%l

var_dump(strftime("%l", time()));

确实会在Windows上抛出错误。

阅读关于strftime的手册......

  

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

中找到受支持的转换说明符的完整概述

因此%l是不受支持的。{/ p>

答案 1 :(得分:3)

在我的本地WAMP服务器上遇到此问题时,我发现%l的解决方案无效。在%e %#d的修复之后,我使用%#I进行了一小时的测试而没有在0之前,并且它完美无缺地运行。所以你可以使用这是你的代码:

var_dump(strftime("%m-%d-%Y %#I:%M:%S", time()));

不幸的是,这在linux环境中不起作用,它会输出#I而不是小时。