首页 > 解决方案 > 为什么 DateTime::createFromFormat('dmY H:i A', $date)->format('dmY') 将日期更改为下午 1 点之后的第二天?

问题描述

为什么 DateTime::createFromFormat('dmY H:i A', $date)->format('dmY') 将日期更改为下午 1 点之后的第二天?

** 请注意,我认为这可能与“H”或“h”的格式有关,我仍在尝试弄清楚..

    $date = "04-12-2018 12:59 PM";
    $date_input = "04-12-2018 13:00 PM";

    echo $date . ' - date <br>';
    echo $date_input . ' - date_input <br>';

    var_dump($date);
    echo '<br/>';
    var_dump($date_input);
    echo '<br/>';

    echo DateTime::createFromFormat('d-m-Y H:i A', $date)->format('d-m-Y') . '<br/>';
    echo DateTime::createFromFormat('d-m-Y H:i A', $date_input)->format('d-m-Y') . '<br/>';

结果:

04-12-2018 12:59 PM - date

04-12-2018 13:00 PM - date_input 

string(19) "04-12-2018 12:59 PM" 

string(19) "04-12-2018 13:00 PM" 

04-12-2018

05-12-2018

标签: phpdatetime

解决方案


根据DateTime::__construct() 的 PHP 文档

不存在的值会翻转。

// Non-existent values roll over.
$date = new DateTime('2000-02-30');
echo $date->format('Y-m-d H:i:sP') . "\n";

输出

 2000-03-01 00:00:00-05:00

所以这不是一个错误,它是一个特性。


推荐阅读