我试图比较两次,其中一次是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点之间进行评估?
答案 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!";
}