PHP 的 strtotime() 不适用于 April 的缩写 (apr)

PHP's strtotime() doesn't work with April's abbreviation (apr)

写作时:

echo date('H:i:s', strtotime('Mar-29-2016')) . "<br />";
echo date('H:i:s', strtotime('Apr-3-2016'));

我希望得到:

00:00:00
00:00:00

但实际上得到:

00:00:00
16:16:00

更改为:

echo date('H:i:s', strtotime('March 29 2016')) . "<br />";
echo date('H:i:s', strtotime('April 3 2016'));

通过输出按预期工作:

00:00:00
00:00:00

我不明白 strtotime() 怎么样?

尝试:

echo date('H:i:s', strtotime('Apr-03-2016'));

strtotime 函数需要一个包含英文日期格式的字符串,并将尝试将该格式解析为 Unix 时间戳。

似乎 Apr-3-2016 不是有效的日期格式。来自php docs

Month abbreviation, day and year    M "-" DD "-" y  "May-09-78", "Apr-17-1790"

"Apr-3-2016" 不是有效的 PHP 复合 date/time 字符串。将您的字符串转换为 strtotime() 可以识别的内容。例如,将下面的第一个结果(您的字符串)与其他一些选项进行比较:

echo date('r', strtotime('Apr-3-2016')) . "\n"; 
echo date('r', strtotime('3-Apr-2016')) . "\n";
echo date('r', strtotime('2016-04-03')) . "\n";
echo date('r', strtotime('4/3/2016'))   . "\n";

Sun, 03 Apr 2016 16:16:00 -0400
Sun, 03 Apr 2016 00:00:00 -0400
Sun, 03 Apr 2016 00:00:00 -0400
Sun, 03 Apr 2016 00:00:00 -0400

要将您的 "Apr-3-2016" 格式转换为“2016 年 4 月 3 日”,例如:

$date = "Apr-3-2016";
list($m, $d, $y) = explode("-", $date);
$newdate = join("-", array($d, $m, $y));