Gomerkucher
@Gomerkucher
Frontend developer

Как правильно сравнить время в цикле?

Доброго времени суток. Есть задача.

$array = array(
		'0' => array(
				'start' => '17:05',
				'end' => '19:05',
				'text' => 'test 1'
			),
		'1' => array(
				'start' => '09:05',
				'end' => '17:05',
				'text' => 'test 2'
			),
		'2' => array(
				'start' => '19:05',
				'end' => '00:05',
				'text' => 'test 3'
			),
		'3' => array(
				'start' => '23:45',
				'end' => '09:00',
				'text' => 'test 4'
			)
	);

	date_default_timezone_set('Asia/Vladivostok');
	$currentTime = strtotime('6:42');

	foreach ($array as $key => $value) {
		if ( ($currentTime > strtotime($value['start'])) && ($currentTime < strtotime($value['end'])) ) {
			echo $value['text'] . '<br>';
			break;
		}
	}


Есть массив с временными интервалами. Нужно в зависимости от того к какому интервалу принадлежит текущее время, выводить нужный text. Подскажите как правильно решить, плиз. Как сравнить понятно, но есть проблема, когда передаю для сравнения 6:42 не выводится 'test 4', т.к. 6:42 меньше чем 23:45. Как правильно учитывать такие моменты?
  • Вопрос задан
  • 150 просмотров
Решения вопроса 1
bingo347
@bingo347
Crazy on performance...
Если start > end то промежуток содержит полночь, в этом случае надо проверять, что текущее время входит либо в промежуток от start до полуночи либо от полуночи до end
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
anton_lazarev
@anton_lazarev
$currentTime = new DateTime('6:42');

  foreach ($array as $key => $value) {
    if ( ($currentTime > new DateTime($value['start'])) && ($currentTime < new DateTime($value['end'])) ) {
      echo $value['text'] . '<br>';
      break;
    }
  }
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы