【发布时间】:2020-02-19 00:58:41
【问题描述】:
我希望有一个单行返回函数来从今天开始获取 150 年前的日期。
我现在有,
return date('Y-m-d', strtotime('-150 year'));
问题是这返回 1970-01-01 而不是 150 年前。
这是为什么?
【问题讨论】:
-
你熟悉Unix time吗?
我希望有一个单行返回函数来从今天开始获取 150 年前的日期。
我现在有,
return date('Y-m-d', strtotime('-150 year'));
问题是这返回 1970-01-01 而不是 150 年前。
这是为什么?
【问题讨论】:
您的问题是 strtotime 返回一个 unix 时间戳(自 1970-01-01 00:00:00 以来的秒数),因此它可以理解的最早日期是 1970-01-01。因为 150 年前的今天是在 1970-01-01 strtotime 返回 false 之前,这被解释为按日期的 0 时间戳,导致输出 1970-01-01。要解决此限制,请使用 DateTime 类:
$date = new DateTime('-150 year');
echo $date->format('Y-m-d');
输出(截至2020-02-19):
1870-02-19
如果代码确实需要一行,可以这样写:
$date = (new DateTime('-150 year'))->format('Y-m-d');
【讨论】: