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

时间:2018-04-07 13:31:58

标签: php datetime strtotime

strtotime总是显示当前年份,即使过去的日期也是过去几年。我检查了yyyy-mm-dd格式,它运行正常。唯一的问题是我目前的格式是文本(2016年12月20日)

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

输出:1545354960(格林威治标准时间:12月20日星期四, 2018 2:46:00 PM)

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

由于

1 个答案:

答案 0 :(得分:3)

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

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

  

注意:

     

"年(也就是一年)"格式仅在找到时间字符串时有效 - 否则此格式被识别为HH MM。

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

$sd = "20th Dec, 2016";
echo date("y", strtotime(preg_replace("/([\w ]+),([\w ]+)/", "$1$2", $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"));