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

Sea*_*ray 5 php date strtotime

我有这个代码:

$endDate='02-20-2014'; //Just updated this
echo date('Y-d-m',strtotime($endDate));
Run Code Online (Sandbox Code Playgroud)

为什么strtotime()一直给我1969-31-12

我的目标是获得:2014-02-20

Boa*_*oaz 2

根本问题

PHP 支持的日期格式不包括您正在使用的输入日期格式,'02-20-2014'或者mm-DD-YY

为什么你会得到1969-31-12

由于你的输入格式错误,strtotime()失败。在 PHP 5.1 及更高版本中,在这种情况下strtotime()将返回,并且调用将计算为(即UNIX 纪元的日期)。falsedate()1970-01-01

然而,在你的情况下,strtotime()似乎会-1失败而返回。这表明您正在使用过时的 PHP 版本(5.0.x 或更低版本)。它还会导致date()调用返回(即减去UNIX 纪元1969-31-12的一秒)

解决方案

将输入日期格式更改为任何PHP 支持的日期格式。另外,为了获得您指定的输出日期格式,2014-02-20YY-mm-dd,您应该根据from 到调整函数format的参数。date()Y-d-mY-m-d

例如:

$endDate='2014-20-02';
echo date('Y-m-d',strtotime($endDate));
Run Code Online (Sandbox Code Playgroud)

关于 PHP 版本的旁注

如果可能,强烈建议您将系统从过时的 PHP 5.0.x 版本迁移到最新版本。从那时起,您应该小心检查每个版本迁移的更改日志,以确保您没有破坏任何现有代码。