strtotime() 返回带有 DD.MM.YY 输入的当前日期 - why


strtotime() returns current date with DD.MM.YY input - why?

假设我得到了以下代码:

echo "12.07.2016 - ".date("d.m.Y", strtotime("12.07.2016"));
echo "12.07.16 - ".date("d.m.Y", strtotime("12.07.16"));

返回以下内容:

12.07.2016 - 12.07.2016
12.07.16 - 01.02.2016

第一个日期的格式正确,第二行返回当前日期 - 为什么会这样?strtotime() 不能处理两位数格式的年份吗?

编辑:为了澄清,我仍然希望date()用4位数字列出年份。似乎 strtotime() 不接受任何带有 2 位年份的输入,而是返回当前日期的时间戳......

string date ( string $format [, int $timestamp = time() ] )

时间戳 :- 可选的 timestamp 参数是一个整数 Unix 时间戳,如果时间戳为 没有给出。

换句话说,它默认为 time() 的值。

所以在你的情况下,排队echo "12.07.16 - ".date("d.m.Y", strtotime("12.07.16"));

您应该输入的格式

是 12.07.2016,但您输入了 12.07.16,该格式被丢弃,因此它采用了默认的本地日期

您可以这样做来格式化

$datetime = DateTime::createFromFormat('d.m.y', '12.07.16');
echo $datetime->format('d.m.Y');

原因很简单 您需要在以下语句中取小"y":

echo "12.07.16 - ".date("d.m.Y", strtotime("12.07.16"));

echo "12.07.16 - ".date("d.m.y", strtotime("12.07.16"));

y 在 2 位数字的小返回年份中,因此您的代码可以是:

echo "12.07.2016 - ".date("d.m.Y", strtotime("12.07.2016"));
echo "12.07.16 - ".date("d.m.y", strtotime("12.07.16"));

您正在使用用于 YYYY 甲酸的"Y"。

你应该试试这个代码

echo "12.07.2016 - ".date("d.m.y", strtotime("12.07.2016"));// for YY format
echo "12.07.16 - ".date("d.m.Y", strtotime("12.07.16")); // for YYYY formate
echo $a = date("d-m-Y H:i:s",time()); // for current time stamp

输出:

12.07.2016 - 12.07.16
12.07.16 - 01.02.2016
01-02-2016 12:16:12
如果以

正确的方式书写,它接受 2 位数字的年份。

例:

echo $one = "12.07.2016 - ".date("d.m.Y", strtotime("12.07.2016"));
echo "</br>";
echo $two = "12.07.16 - ".date("d.m.Y", strtotime("16-07-12"));