簡體   English   中英

為什么DateTime :: createFromFormat('dmY H:i A',$ date)-> format('dm-Y')將日期更改為下午1點后的第二天?

[英]Why does DateTime::createFromFormat('d-m-Y H:i A', $date)->format('d-m-Y') change the date to the following day after 1pm?

為什么DateTime :: createFromFormat('dmY H:i A',$ date)-> format('dm-Y')將日期更改為下午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

您不能有13:00 PM。如果執行此操作,那么格式化功能會認為是第二天。

將代碼更改為以下解決方案:

**注意:$ date_input和$ another_date的格式為'H或h'和'A'

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

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

var_dump($date);
echo '<br/>';
var_dump($date_input);
echo '<br/>';
var_dump($another_date);
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', $date_input)->format('d-m-Y') . '<br/>';
echo DateTime::createFromFormat('d-m-Y h:i A', $another_date)->format('d-m-Y') . '<br/>';

“ 13:00 pm”不是有效時間:在12小時時鍾中,從1到12。您可以通過調用DateTime::getLastErrors()檢查解析是否失敗:

php > echo DateTime::createFromFormat('d-m-Y H:i A', $date_input)->format('d-m-Y');
05-12-2018
php > print_r(DateTime::getLastErrors());
Array
(
    [warning_count] => 1
    [warnings] => Array
        (
            [19] => The parsed time was invalid
        )

    [error_count] => 0
    [errors] => Array
        (
        )

)

似乎該實現將下午13點視為凌晨1點,就像將“ 11月31日”視為12月1日一樣。

根據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

因此,這不是錯誤,而是功能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM