PHP - strtotime() 和 datetime 奇怪的行为

PHP - strtotime() and datetime strange behavior

我有一些日期格式为以下格式的字符串:18-04-17。 我想将它们转换为日期。

起初我用strtotime()把它改成日期:

$timestamp = strtotime($row['reqEndDate']);
$newdate = date("d-m-Y", $timestamp);
echo $newdate;

这输出:17-04-2018。如您所见,它把日期误认为是年份。

接下来我尝试使用datetime,如下:

$newdate = datetime::createFromFormat("d-m-Y", $row['reqEndDate']);
echo $newdate->format('d-m-Y');

此输出:18-04-0017。此方法正确获取日期,但它打印的不是 2017 年,而是 0017。

这种行为有什么原因吗?也许我的 php 设置中的某些设置要查找?

大写 Y 将产生 4 位数的年份。小写 y 产生两位数的年份。您的 DateTime 代码应该是:

$date = DateTime::createFromFormat('d-m-y', $row['reqEndDate']);
echo $date->format('d-m-Y');

You can read about supported formats in PHP's manual page about date.