Временные интервалы в дате php

299
29 марта 2017, 18:53

Доброго времени! Столкнулся с такой задачей, есть 2 переменные с датой и временем

$progresolddate = '2000-10-10 11:12:00';
$getcycle['time'] = '2000-10-10 12:12:00';

дата и время в них может быть произвольная, но вторая дата всегда больше первой (хотя бы на минуту), и надо отследить попадает ли разница во времени в какой-то из временных интервалов.
Я попробовал сделать так:

if ((substr($progresolddate, 11,5) >= '00:00' && substr($getcycle['time'], 11,5) <= '00:59') || 
(substr($progresolddate, 11,5) >= '01:00' && substr($getcycle['time'], 11,5) <= '01:59') ||
(substr($progresolddate, 11,5) >= '02:00' && substr($getcycle['time'], 11,5) <= '02:59') ||
(substr($progresolddate, 11,5) >= '03:00' && substr($getcycle['time'], 11,5) <= '03:59') ||
(substr($progresolddate, 11,5) >= '04:00' && substr($getcycle['time'], 11,5) <= '04:59') ||
(substr($progresolddate, 11,5) >= '05:00' && substr($getcycle['time'], 11,5) <= '05:59') ||
(substr($progresolddate, 11,5) >= '06:00' && substr($getcycle['time'], 11,5) <= '06:59') ||
(substr($progresolddate, 11,5) >= '07:00' && substr($getcycle['time'], 11,5) <= '07:59') ||
(substr($progresolddate, 11,5) >= '08:00' && substr($getcycle['time'], 11,5) <= '08:59') ||
(substr($progresolddate, 11,5) >= '09:00' && substr($getcycle['time'], 11,5) <= '09:59') ||
(substr($progresolddate, 11,5) >= '10:00' && substr($getcycle['time'], 11,5) <= '10:59') ||
(substr($progresolddate, 11,5) >= '11:00' && substr($getcycle['time'], 11,5) <= '11:59') ||
(substr($progresolddate, 11,5) >= '12:00' && substr($getcycle['time'], 11,5) <= '12:59') ||
(substr($progresolddate, 11,5) >= '13:00' && substr($getcycle['time'], 11,5) <= '13:59') ||
(substr($progresolddate, 11,5) >= '14:00' && substr($getcycle['time'], 11,5) <= '14:59') ||
(substr($progresolddate, 11,5) >= '15:00' && substr($getcycle['time'], 11,5) <= '15:59') ||
(substr($progresolddate, 11,5) >= '16:00' && substr($getcycle['time'], 11,5) <= '16:59') ||
(substr($progresolddate, 11,5) >= '17:00' && substr($getcycle['time'], 11,5) <= '17:59') ||
(substr($progresolddate, 11,5) >= '18:00' && substr($getcycle['time'], 11,5) <= '18:59') ||
(substr($progresolddate, 11,5) >= '19:00' && substr($getcycle['time'], 11,5) <= '19:59') ||
(substr($progresolddate, 11,5) >= '20:00' && substr($getcycle['time'], 11,5) <= '20:59') ||
(substr($progresolddate, 11,5) >= '21:00' && substr($getcycle['time'], 11,5) <= '21:59') ||
(substr($progresolddate, 11,5) >= '22:00' && substr($getcycle['time'], 11,5) <= '22:59') ||
(substr($progresolddate, 11,5) >= '23:00' && substr($getcycle['time'], 11,5) <= '23:59')) {
echo 'sd';
}

Но тут несколько проблем - во первых слишком громоздко. Я знаю, что в php есть много функций работы с датой и временем, да и этот скрипт срабатывает нормально только если разница между датами меньше часа.
Есть ли какая нибудь функция или способ сделать это более работоспособно?

Answer 1
  • Для начала нужно создать из строк объекты DateTime.
  • Далее, сравниваем необходимые нам форматы этих объектов
    Например, $a->format('H') === $b->format('H')

Пример:

$a = '2000-10-10 11:12:00';
$b = '2000-10-10 12:12:00';
$c = '2000-10-10 12:36:00';
$a = new \DateTime($a);
$b = new \DateTime($b);
$c = new \DateTime($c);
$ab = $b->format('Y-m-d H') === $a->format('Y-m-d H');
$bc = $c->format('Y-m-d H') === $b->format('Y-m-d H'); // сравниваем без минут
var_dump($ab); // false
var_dump($bc); // true
READ ALSO
Ошибка при создании формы по аннотациям [Syntax Error] Expected PlainValue, got &#39;$&#39; at position 78

Ошибка при создании формы по аннотациям [Syntax Error] Expected PlainValue, got '$' at position 78

Создаю сайт и потребовалось создать элемент формы select который бы выводил список всех пользователей для выбораСоздавать форму мне удобнее...

354
PHP парсинг XML param в yandex.xml

PHP парсинг XML param в yandex.xml

Подскажите, пожалуйста, как прочитать и вывести данные из файла XML? Есть файл стандарта yandex

215
Не могу изменить часовой пояс php

Не могу изменить часовой пояс php

Не могу понять откуда берется часовой поясВ php

224