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

Php 为什么windows上的strftime()返回false?(我不使用%e),php,windows-7-x64,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())); var_dump(strftime(“%m-%d-%Y%l:%m:%S”,time()); 回声“”; 变量转储(strftime(“%Y-%d-%m%H:%m:%S”,time()); 第一行返回false,第三行返回预期的字符串“2012

这是我的密码:

var_dump(strftime("%m-%d-%Y %l:%M:%S", time()));
echo "<br />";
var_dump(strftime("%Y-%d-%m %H:%M:%S", time()));
var_dump(strftime(“%m-%d-%Y%l:%m:%S”,time());
回声“
”; 变量转储(strftime(“%Y-%d-%m%H:%m:%S”,time());
第一行返回false,第三行返回预期的字符串“2012-10-09 23:03:18”(长度=19)

为什么第一行返回false


我在运行windows 7x64和wamp时使用了相当默认的设置。

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

var_dump(strftime("%l", time()));
确实会在windows上抛出错误

阅读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而不是小时。

两者都在我的(Mac)计算机上返回一个日期字符串,因此您可能发现了一个bug。如果出现警告,您会得到什么?警告:在第3行的C:\xampp\htdocs\time.php中检测到无效的CRT参数
var_dump(strftime(“%m-%d-%Y%H:%m:%S”,time())返回,您使用的是什么语言版本的Win7?请尝试
var_dump(strftime(“%m-%d-%Y%#I:%m:%S”,time())和报告背景字符串'09-11-2012 00:31:14'(长度=19)和字符串'09-11-2012 12:31:42'(长度=19)确实是l。感谢您注意到(可能还有其他人)。我一定错过了。以供将来参考,获取Windows中支持的转换列表