我有这段代码:
$endDate='02-20-2014'; //Just updated this
echo date('Y-d-m',strtotime($endDate));
为什么strtotime()
不断给我1969-31-12
?
我的目标是获得:2014-02-20
答案 0 :(得分:0)
根本问题
PHP supported date formats不包括您使用的输入日期格式,'02-20-2014'
或mm-DD-YY
为什么要获得1969-31-12
由于输入格式错误,strtotime()
失败。在PHP 5.1及更高版本中,strtotime()
在这种情况下会返回false
,date()
调用将评估为1970-01-01
(即the day of the UNIX epoch)。
但是,在您的情况下,strtotime()
似乎会在失败时返回-1
。这表明您使用的是过时的PHP版本(5.0.x or less)。它还会导致date()
调用返回1969-31-12
(即减去the UNIX epoch的一秒钟)
解决方案
将输入日期格式更改为PHP supported date formats中的任何一种。此外,为了获得您指明的输出日期格式2014-02-20
或YY-mm-dd
,您应该根据{{1}调整format
函数的date()
参数转到Y-d-m
。
例如:
Y-m-d
关于PHP版本的附注
如果可能,强烈建议您将系统从过时的PHP 5.0.x版本迁移到最新版本。您应该小心检查the change logs of each version migration ever since以确保不会破坏任何现有代码。
答案 1 :(得分:0)
刚发现这一点,并认为我应该添加一个更正和其他信息:
m / d / y或d-m-y格式的日期通过查看来消除歧义 各个组件之间的分隔符:如果分隔符是 斜线(/),则假定为美国m / d / y;而如果 分隔符是破折号(-)或点(。),然后是欧洲d-m-y格式 假设。 (资源: Converting string to Date and DateTime)
如果使用strtotime
,则2014年2月20日!= 2014年2月20日
2014年2月20日将失败,因为没有20个月了
2014年2月20日是2月20日
如果您使用如上所述的一年优先格式,例如
$endDate='2014-20-02';
然后中间的数字对总是 一个月,因此无论您的日期是美国还是欧洲,此日期都是无效的。
echo date('Y-m-d',strtotime($endDate));
和
echo date('Y-d-m',strtotime($endDate));
都会失败,因为传递给date的第一个参数是输出格式,并且strtotime
已经失败,导致返回的日期为“ 1969-12-31”