PHP 比较 00:00 之后和之前的两次 24 小时格式

PHP compare between two times 24 hour format after 00:00 and before

我正在尝试比较两个时间,一个是 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 点之间进行评估?

就像处理月份一样,一月是今年的第一个月或去年的第 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 非常好当某个地方使用大于最大值时滚动到下一个位置。

因为你只是在比较当前时间(现在的时间),逻辑上你不必担心明天的时间。如果你是今天的inside/outside次,你只需要比较opening/closing次。

<?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!";
}