PHP сравнивать между двумя 24-часовыми форматами после 00:00 и до - PullRequest
0 голосов
/ 11 мая 2018

Я пытаюсь сравнить два раза, один из которых в 12-часовом формате, а другой в 24-часовом формате, то есть после 12 часов утра.

$time = date( 'H:i:s', current_time( 'timestamp', 0 ));
$open = '18:00';
$closed = '01:30';
if ( $time < $open || $time > $closed)
{
//do something
}

это всегда не получается, это что-то делатьс 01.30, потому что если я делаю что-то меньше 00:00, например, 23.30:

$time = date( 'H:i:s', current_time( 'timestamp', 0 ));
$open = '18:00';
$closed = '23:30';

Выше работает.

Я также пытался strtotime, как это без успеха.

if ( $time < strtotime($open) || $time > strtotime($closed))

Как я могу оценить с 6 вечера до 2 утра?

Ответы [ 2 ]

0 голосов
/ 11 мая 2018

Поскольку вы сравниваете только текущее время (время прямо сейчас), логически вам не нужно беспокоиться о времени завтрашнего дня. Вам нужно сравнивать, только если вы находитесь внутри / вне сегодняшнего времени открытия / закрытия.

<?php
// SET RELEVANT TIMEZONE
date_default_timezone_set('Europe/Dublin');

// CURRENT UNIX TIMESTAMP
$time_now = time();

// TODAY AT 18:00:00 (24 HOUR) UNIX TIMESTAMP
$opening_time = DateTime::createFromFormat('H:i:s', '18:00:00')->format("d-M-Y H:i:s"); // 11-May-2018 18:00:00

// TODAY AT 01:30:00 (24 HOUR) UNIX TIMESTAMP
$closing_time = DateTime::createFromFormat('H:i:s', '01:30:00')->format("d-M-Y H:i:s"); // 11-May-2018 01:30:00

// WE ARE CLOSED IF:
// TIME NOW IS AFTER CLOSING TIME TODAY (01:30:00)
// AND TIME NOW IS BEFORE OPENING TIME TODAY (18:00:00)
if($time_now > strtotime($closing_time) && $time_now < strtotime($opening_time))
{
    echo "Sorry, we are closed!";
}
else
{
    echo "We are open, come on in!";
}
0 голосов
/ 11 мая 2018

Как и в случае с месяцами, когда январь является первым месяцем этого года или 13-м месяцем прошлого года, 1 час утра - это либо 1-й час сегодняшнего дня, либо 25-й час завтрашнего дня.

Я бы изменил вашу логику и определил, является ли она в настоящее время больше 0130 и меньше 1800. Уберите двоеточия, и это действительно очень просто

$close=013000;
$open=180000;
$now=date( 'His', time());

if (($close<$now)&&($now<$open)){
 print("Go away, we're closed");
}else{
 print("Welcome to the store!");
}

Если вы не хотите менять логику, вместо использования 01:30 используйте 25:30 для значения - PHP и date довольно хороши при переходе на следующую позицию, когда значение больше максимального использовал какое-то место.

...