Точное сравнение времени в формате H:i

249
04 декабря 2017, 18:24

Доброго времени! Пробую сверить время в формате ЧЧ:ММ есть функция которая через str_replace вырезает из текущего времени формата Y-m-d H:i:s (2017-12-02 17:08:11) и записывает его в переменную $new. Дальше требуется проводить сравнения вроде:

if ($new >= "13:00" && $new <= "15:45") {
//операции
}

но сравнение идет не корректно как я понял из-за того что время сравнивается в формате строк. Можно ли как то сравнить что бы не было глюков? но очень надо что бы сравнивались именно часы без указания более точных дат, может какое то временное преобразование часов в более полную дату а затем сравнивать уже. Но главное приоритетно что бы в конструкциях if else указывалось именно время в формате часы-минуты

Answer 1

Вот еще вариант функции

<?php
function isBetween($hi, $st, $end) {
    $hi  = strtotime($hi);
    $st  = strtotime($st);
    $end = strtotime($end);
    if ($st < $end) {
        return $st <= $hi && $hi <= $end;
    } else {
        return (strtotime('00:00') <= $hi && $hi <= $end) 
            || ($st <= $hi && $hi <= strtotime('23:59'));
    }
}
var_dump(isBetween('08:01', '08:00', '17:00'));
var_dump(isBetween('07:59', '17:00', '08:00'));
var_dump(isBetween('17:00', '17:00', '08:00'));
var_dump(isBetween('23:59', '17:00', '08:00'));
var_dump(isBetween('07:59', '08:00', '17:00'));
var_dump(isBetween('07:60', '08:00', '17:00'));
var_dump(isBetween('16:59', '17:00', '08:00'));
var_dump(isBetween('24:00', '17:00', '08:00'));
var_dump(isBetween('24:00', '08:00', '17:00'));

Результат

bool(true)
bool(true)
bool(true)
bool(true)
bool(false)
bool(false)
bool(false)
bool(false)
bool(false)

Тест http://sandbox.onlinephpfunctions.com/code/d4580648fe605c1cb4544f5cbb30a9b01455e727

На вход функция ждет строки в формате HH:MM. Если хотите с секундами, то в функции нужно дописать к 23:59 хвостик :59.

Возвращает true если:

  1. $hi находится между $st и $end, при $st < $end
  2. $hi <= $st или $hi >= $end, при $st >= $end

P.S. Используете на свой страх и риск.

READ ALSO
Разбить данные на массивы строк

Разбить данные на массивы строк

ЗдравствуйтеКак разбить спарсенные данные в массивы строк?

264
Как создать регистрацию для localhost на mac os

Как создать регистрацию для localhost на mac os

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

249
Проверка на пустоту ответа от сервера

Проверка на пустоту ответа от сервера

Как проверить на пустоту, если приходит такой ответ

239