Как использовать DateTime :: diff () с DateTime :: format ('% R') в PHP 5.2? - PullRequest
2 голосов
/ 27 мая 2011

Есть много вопросов (и решений) о DateTime :: diff () вокруг, но я не нашел решения для следующего фрагмента кода:

$start = new DateTime('13:00');
$end = new DateTime('02:00');

$difference = $start->diff($end);

if ($difference->format('%R') === '-')
{
    $passedMidnight = true;
}
else
{
    $passedMidnight = false;
}

Это в основном то, что я 'в PHP 5.2: способ узнать, проходит ли $ end полночь по сравнению с $ start.

Ответы [ 3 ]

0 голосов
/ 27 мая 2011

Поскольку вы создаете объекты DateTime всего за раз, то вы действительно хотите посмотреть, наступит ли $ end раньше дня, чем $ start. Для этого вы можете использовать функцию getTimestamp.

if ($end->getTimestamp() < $start->getTimestamp()) {
    echo "Midnight has passed";
} else {
    echo "Midnight has not passed";
}
0 голосов
/ 28 мая 2011

Я закончил этим, спасибо Пекке и П.Ф. Хейсу за идеи:

$start = strtotime('13:00');
$end = strtotime('01:00');

if ($end < $start)
{
    echo "Midnight has passed";
}
else
{
    echo "Midnight has not passed";
}
0 голосов
/ 27 мая 2011

Разве не достаточно просто проверить, совпадают ли две даты в один и тот же день?

$start = new DateTime('13:00');
$end = new DateTime('02:00');

if ($start->format('Y-m-d') == $end->format('Y-m-d'))
 echo "Midnight has NOT passed";
else
 echo "Midnight has passed";

Я не вижу сценария, в котором это не сработало бы, потому что летнее время обычно переводит часы на 2 часа ночи (верно?).

...