PHP 时间范围的特例
Special case for time range in PHP
我在处理时间范围的特例时遇到问题。我有一个函数可以确定时间是否在范围内。
function check_time($start, $end){
$start = date( 'H:i', strtotime( $start ) ); // ex: 11:00 AM
$end = date( 'H:i', strtotime( $end ) ); // ex: 2:00 PM
// check the range
if ( current_time( 'H:i' ) > $start && current_time( 'H:i' ) < $end ) {
return true;
}
}
这适用于不同的情况,但如果结束时间从午夜到第二天,它就会失败。
for example, assume the current time is 3:00 PM
6:00 AM - 10:00 PM // true
1:00 PM - 9:00 PM // true
2:00 PM - 1:00 AM // false // should be true
2:00 PM - 2:00 AM // false // should be true
如何避免测试在这些特殊情况下失败并且 return 即使它通过了午夜也是如此?
假设 $start
和 $end
已经代表了日期和时间(它们应该是或 strtotime
不会按预期工作)然后做:
if( time() > strtotime($start) && time() < strtotime($end) ) {
return true
}
你需要区分$start
小于$end
的情况,反之亦然。
当$start
小于$end
时,可以简单的测试当前时间是否介于两者之间。
当$start
大于$end
时,表示时间跨过午夜。在这种情况下,您应该测试当前时间是否在 $start
之后或 之前 $end
,而不是 AND .
function check_time($start, $end){
$start = date( 'H:i', strtotime( $start ) ); // ex: 11:00 AM
$end = date( 'H:i', strtotime( $end ) ); // ex: 2:00 PM
$cur = current_time( 'H:i' );
if ($start < $end) {
return $cur > $start && $cur < $end;
} else {
return $cur > $start || $cur < $end;
}
}
我在处理时间范围的特例时遇到问题。我有一个函数可以确定时间是否在范围内。
function check_time($start, $end){
$start = date( 'H:i', strtotime( $start ) ); // ex: 11:00 AM
$end = date( 'H:i', strtotime( $end ) ); // ex: 2:00 PM
// check the range
if ( current_time( 'H:i' ) > $start && current_time( 'H:i' ) < $end ) {
return true;
}
}
这适用于不同的情况,但如果结束时间从午夜到第二天,它就会失败。
for example, assume the current time is 3:00 PM
6:00 AM - 10:00 PM // true
1:00 PM - 9:00 PM // true
2:00 PM - 1:00 AM // false // should be true
2:00 PM - 2:00 AM // false // should be true
如何避免测试在这些特殊情况下失败并且 return 即使它通过了午夜也是如此?
假设 $start
和 $end
已经代表了日期和时间(它们应该是或 strtotime
不会按预期工作)然后做:
if( time() > strtotime($start) && time() < strtotime($end) ) {
return true
}
你需要区分$start
小于$end
的情况,反之亦然。
当$start
小于$end
时,可以简单的测试当前时间是否介于两者之间。
当$start
大于$end
时,表示时间跨过午夜。在这种情况下,您应该测试当前时间是否在 $start
之后或 之前 $end
,而不是 AND .
function check_time($start, $end){
$start = date( 'H:i', strtotime( $start ) ); // ex: 11:00 AM
$end = date( 'H:i', strtotime( $end ) ); // ex: 2:00 PM
$cur = current_time( 'H:i' );
if ($start < $end) {
return $cur > $start && $cur < $end;
} else {
return $cur > $start || $cur < $end;
}
}