我有此代码:
$endDate='02-20-2014'; //Just updated this
echo date('Y-d-m',strtotime($endDate));
为什么strtotime()
继续给我1969-31-12
?
我的目标是获得:2014-02-20
根问题
PHP支持的日期格式不包括您使用的输入日期格式,'02-20-2014'
或mm-DD-YY
为什么您获得1969-31-12
由于您的输入格式是错误的,因此strtotime()
失败。在PHP 5.1及更高版本中,在这种情况下,strtotime()
将返回false
,并且date()
调用将评估为1970-01-01
(即Unix Epoch的一天)。
但是,在您的情况下,strtotime()
似乎在失败上返回-1
。这表明您使用了过时的PHP(5.0.x或更少)的版本。它还导致date()
呼叫返回1969-31-12
(即减去Unix Epoch的一秒钟)
解决方案
将您的输入日期格式更改为PHP支持的日期格式中的任何一个。此外,为了获得您指示的输出日期格式,2014-02-20
或YY-mm-dd
,应根据Y-d-m
到Y-m-d
的date()
函数的format
参数。
例如:
$endDate='2014-20-02';
echo date('Y-m-d',strtotime($endDate));
有关PHP版本的旁注
如果可能的话,强烈建议您将系统从过时的PHP 5.0.x版本迁移到最新版本。您应该小心检查每个版本的迁移的更改日志,以确保您不会打破任何退出的代码。
刚刚找到了这一点,以为我应该添加更正和其他信息:
M/d/y或D-m-y格式中的日期通过查看而被歧视 各个组件之间的分离器:如果分离器为 斜线(/),然后假定美国M/D/Y;而如果是 分离器是破折号( - )或点(。),然后是欧洲D-M-y格式 假设。(来源: 将字符串转换为日期和日期时间)
如果使用strtotime
,则02-20-2014!= 02/20/2014
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));
将失败,因为第一个参数传递到日期是输出格式,并且strtotime
已经失败了,导致返回的日期为" 1969-12-31"