PHP 日期时间从 return 格式创建错误的结果

PHP datetime create from format return wrong result

我需要检查一个字符串是否与某种格式匹配,我使用 DateTime::createFromFormat 来强制执行它。但它有一些错误。

示例我有一个日期:2020 年 8 月 15 日,我尝试将其解析为格式为“d/m/Y”的日期时间对象,然后将其打印为其他格式:

   DateTime::createFromFormat("d/m/Y", '8/15/2020')->format('d-m-Y')
   // result: 08-03-2021

那是 wreig,因为我读过 php.net https://www.php.net/manual/en/datetime.createfromformat.php 他们说:d:日(1->30),m:月(1->12),Y:年(2020)

但是我得到了一个奇怪的结果?它是如何工作的?还是错误?

感谢您的回答。

您的格式是 day/month/year,但没有像给出的 8/15/2020 那样的月份 15

你是说 15/8/2020 吗?

i try to parse it to datetime object with format "d/m/Y"

...不清楚您为什么要这样尝试。 8/15/2020 显然是 m/d/Y。您需要使用它实际编写的格式来解析它。

之后您可以再次将其输出到 d/m/Y - 这是一个单独的操作。

DateTime::createFromFormat("m/d/Y", '8/15/2020')->format('d-m-Y')

我认为 PHP 手册不正确。

如果超出日期或月份的范围,DateTime::getLastErrors() 方法会生成警告。您可以对此进行评估。例如:

function DateTimeCreateFromStrictFormat($format, $input){
  $dt = DateTime::createFromFormat($format, $input);
  $errArr = DateTime::getLastErrors();
  return $errArr['warning_count']+$errArr['error_count'] ? false : $dt;
}
$dt = DateTimeCreateFromStrictFormat("d/m/Y", '8/15/2020');
var_dump($dt);  //bool(false)

$dt = DateTimeCreateFromStrictFormat("d/m/Y", '8/12/2020');
var_dump($dt);  //object(DateTime)#2 (3) { ["date"]=> string(26) "2020-12-08 10:34:34.000000" ..