为什么strtotime()和date()返回1969-31-12



我有此代码:

$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-20YY-mm-dd,应根据Y-d-mY-m-ddate()函数的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"

最新更新