strtotime 显示以前日期的当前年份

strtotime shows current year for previous dates

strtotime 始终显示当前年份,即使经过的日期是过去的年份。我检查了 yyyy-mm-dd 格式,它工作正常。唯一的问题是我当前的格式是文本(2016 年 12 月 20 日)

$sd = "20th Dec, 2016";
echo strtotime($sd);

Output : 1545354960 (which is GMT: Thursday, December 20, 2018 2:46:00 PM)

这里有什么问题?解决方案是什么?

谢谢

strtotime() 函数只能转换有限数量的格式,详见 PHP 手册的 Supported Date and Time Formats 部分。

Date Formats 页面中的以下说明在这种情况下是相关的,因为示例的 2018 部分被解释为 24 小时时间值。

Note:

The "Year (and just the year)" format only works if a time string has already been found -- otherwise this format is recognised as HH MM.

您可以使用字符串操作(例如,使用 preg_replace()str_replace() 删除 ,)来提供 PHP 可以根据需要解释的日期格式。我更喜欢使用正则表达式,例如:

$sd = "20th Dec, 2016";
echo date("y", strtotime(preg_replace("/([\w ]+),([\w ]+)/", "", $sd)));

一个好的替代方法是使用 DateTime::createFromFormat(),您可以使用它来准确说明日期字符串的格式。

$sd = "20th Dec, 2016";
$dt = DateTime::createFromFormat("dS M, Y", $sd);
echo $dt->format("d-M-Y");
echo strtotime($dt->format("d-M-Y"));