Почему DateTime :: createFromFormat ('d-m-Y H: i A', $ date) -> format ('d-m-Y') изменяет дату на следующий день после 13:00?

Почему DateTime :: createFromFormat ('d-m-Y H: i A', $ date) -> format ('d-m-Y') изменяет дату на следующий день после 13:00?

** Примечание Я думаю, это как-то связано с форматом '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

В 12-часовом формате часы идут с 1 до 12. Нет «13 часов вечера», но если бы они были, что бы это было, если не 1 утра следующего дня?

Joni 04.12.2018 07:32

13:00 должен быть 13:00, в настоящее время я работаю над тестированием A, чтобы увидеть, имеет ли это значение, а также изменение вокруг H

Tom Curphey 04.12.2018 07:34

@TomCurphey Вы нашли подходящее решение в любом из этих # ответов? Если нет, расскажите подробнее. В противном случае сделайте и примите решение, которое лучше всего для вас, чтобы закрыть вопрос - см. Что мне делать, если кто-то ответит на мой вопрос?

ino 04.12.2018 15:03
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
3
137
3

Ответы 3

Вы не можете иметь 13:00 вечера Если вы делаете форматирование, функция думает, что это на следующий день.

Измените код на решение ниже:

** Примечание: $ 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:00 как 1:00, как и «31 ноября» как 1 декабря.

Согласно PHP-документация DateTime :: __ construct ()

Non-existent values roll over.

// 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

Так что это не ошибка, это особенность.

Другие вопросы по теме