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


why does strftime() on windows returns false? (i'm not using %e)

这是我的代码:

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)

为什么第一行返回错误?

我运行的是windows 7x64和wamp,具有相当默认的设置。

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

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

确实会在窗口上引发错误。

正在阅读有关strftime的手册。。。

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

因此,%l显然是不受支持的。

当我在本地WAMP服务器上遇到这个问题时,我发现%l的解决方案不起作用。在修复了%e(即%#d)之后,我使用%#I进行了一个小时的测试,没有之前的0,它工作得非常完美。所以你可以使用这是你的代码:

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

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