Как отформатировать объект DateTime, чтобы он отображал 24:00 вместо 00:00 в PHP?

У меня есть программа PHP, которая показывает два DateTime (или же DateTimeImmutable) объекты: start а также end, Чтобы быть читабельным, полночь должна отображаться как 00:00 за start но 24:00 за end,

Пример:

$start = new DateTime('2017-01-01T22:00:00');
$end   = new DateTime('2017-01-02T00:00:00');
$format = 'Y-m-d H:i';
$startString = $start->format($format);
$endString   = $end->format($format); // What to do here instead?
printf("From %s to %s.\n",  $startString, $endString);

Фактический вывод:

From 2017-01-01 22:00 to 2017-01-02 00:00.

Требуемый выход:

From 2017-01-01 22:00 to 2017-01-01 24:00.

Я ищу решение, которое работает для любого $format строка, то есть я не хочу отдельного решения для каждого формата даты, который встречается в приложении.

1

Решение

Это лучшее, что я мог придумать. Идея состоит в том, чтобы заменить ‘H’ в строке формата на ’24’, но оставить все как есть.

<?php
function endFormat($dateTime, $format)
{
$d = DateTimeImmutable::createFromMutable($dateTime);
if ($d == $d->setTime(0, 0)) {
$yesterday = $d->sub(new DateInterval('P1D'));
$format24 = str_replace('H', '24', $format);
return $yesterday->format($format24);
} else {
return $d->format($format);
}
}

$start = new DateTime('2017-01-01T22:00:00');
$end   = new DateTime('2017-01-02T00:00:00');
$format = 'Y-m-d H:i';
$startString = $start->format($format);
$endString   = endFormat($end, $format);
printf("From %s to %s.\n",  $startString, $endString);

Выход:

From 2017-01-01 22:00 to 2017-01-01 24:00.
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector