@deepprod

Как вывести сообщение в рабочее время?

Здравствуйте. Использовал данный код, но он не работает в чем проблема?

$day_start = '12:00:00';
$day_end = '23:00:00';
$current_time = date('H:i:s'); 
if ($current_time >= $day_start && $current_time <= $day_end) {
   echo 'Мы работаем!'; 
} else {
   echo 'Мы не работаем!';
}
  • Вопрос задан
  • 118 просмотров
Решения вопроса 1
TTATPuOT
@TTATPuOT
https://code.patriotovsky.ru/
Вы сравниваете строки.
Т.е. вы фактически хотите узнать, больше ли строка '12:00:00' строки с текущим временем по типу '22:37:21'.

Вам нужно не строки сравнивать, а время. Для удобства, время можно исчислять метками времени Unix.
$dayStart = strtotime('12:00:00');
$dayEnd = strtotime('23:00:00');
$currentTimestamp = time(); //Я тут чё-то нечайно заговнокодил

Теперь вы их можете сравнить, так как это будут простые числа, которые поддаются ожидаемому сравнению.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
abyrvalg
@abyrvalg
Вам надо отслеживать, в каком "рабочем дне" вы сейчас находитесь и на основе этого двигать границы интервала.

Туповато, но, надеюсь, наглядно:
function isWorkTime(string $timeFrom, string $timeTo, ?string $currentTime = null): bool
{
    $t1 = strtotime($timeFrom);
    $t2 = strtotime($timeTo);
    $now = $currentTime === null ? time() : strtotime($currentTime);

    if ($t2 < $t1) {
        if ($t1 > $now) {
            $t1 -= 86400; // минус одни сутки
        } else {
            $t2 += 86400; // плюс одни сутки
        }
    }
    return $t1 <= $now && $now < $t2;
}

var_export([
    '=== 12:00 - 13:00 (1 hour) ===',
    '1. 11:59' => isWorkTime('12:00', '13:00', '11:59'),
    '1. 12:00' => isWorkTime('12:00', '13:00', '12:00'),
    '1. 12:01' => isWorkTime('12:00', '13:00', '12:01'),
    '1. 12:59' => isWorkTime('12:00', '13:00', '12:59'),
    '1. 13:00' => isWorkTime('12:00', '13:00', '13:00'),
    '1. 13:01' => isWorkTime('12:00', '13:00', '13:01'),
    '1. 00:00' => isWorkTime('12:00', '13:00', '00:00'),
    '=== 00:00 - 12:00, 13:00 - 00:00 (23 hours) ===',
    '2. 11:59' => isWorkTime('13:00', '12:00', '11:59'),
    '2. 12:00' => isWorkTime('13:00', '12:00', '12:00'),
    '2. 12:01' => isWorkTime('13:00', '12:00', '12:01'),
    '2. 12:59' => isWorkTime('13:00', '12:00', '12:59'),
    '2. 13:00' => isWorkTime('13:00', '12:00', '13:00'),
    '2. 13:01' => isWorkTime('13:00', '12:00', '13:01'),
    '2. 00:00' => isWorkTime('13:00', '12:00', '00:00'),
], false);
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽