PHP在00:00之后和之前的24小时格式之间进行比较

时间:2018-05-10 22:43:26

标签: php time strtotime

我试图比较两次,其中一次是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 :(得分:1)

就像几个月和一月的工作要么是今年的第一个月或去年的第13个月,凌晨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非常适合在大于最大值时滚动下一个位置值被用于某个地方。

答案 1 :(得分:0)

由于您只是比较当前时间(现在的时间),从逻辑上讲,您不必担心明天的时间。你只需要比较你今天的开/关时间内/外。

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