У меня есть программа 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
строка, то есть я не хочу отдельного решения для каждого формата даты, который встречается в приложении.
Это лучшее, что я мог придумать. Идея состоит в том, чтобы заменить ‘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.
Других решений пока нет …