PHP检查当前时间是否在指定时间之前

47

我需要在PHP中检查当前时间是否早于当天下午2点。

以前我用strtotime检查日期,但这次只涉及时间,所以每天的0.00时会重置时间并将布尔值从false重置为true

if (current_time < 2pm) {
   // do this
}

1
这甚至不是有效的PHP代码。current_time是什么? - KingCrunch
7
我认为那是伪代码,而不是实际的代码。 :-) - John Parker
2
我知道那不是有效的PHP代码,我只是举了一个逻辑的例子。 - Adam Moss
例子是可以的,但当解决方案依赖于具体格式(例如 2pm1414:00 等等)时,它们就不再有用了。 - KingCrunch
9个回答

98
if (date('H') < 14) {
   $pre2pm = true;
}

要了解有关日期函数的更多信息,请参阅PHP手册。我使用了以下时间格式:

H = 小时的24小时制(00到23)


1
关于分钟不是必需的这一点说得好。能否提供'H'的文档链接? - Merlyn Morgan-Graham
http://uk.php.net/manual/zh/function.date.php 列出了格式化日期的所有不同方式。考虑到使用“G”可能更加简洁,因为它不包括小时只有1位数字时的前导0,尽管PHP并不挑剔,但这不会影响if语句的结果。 - Tom
2
为什么是 H 而不是 G? - Feras
@Feras - 很好的问题!就像我7年前回答的那样,我不确定为什么我选择了H而不是G。我认为你不会得到不同的结果,但使用没有前导0的值会更有意义。 - Tom

34

1
呵呵,一开始看到那个$符号就有点晕了。而且还写着“Hi”,更让人困惑了^^ - JohnP
1400 应该是一个字符串吗? - user2924019
1
@user2924019 它们将得到相同的答案-https://www.php.net/manual/en/language.operators.comparison.php 如果您将数字与字符串进行比较或比较涉及数字字符串,则每个字符串都会转换为数字,然后执行数字比较。。你能获得更好的性能吗?我不知道,请进行基准测试!哪一个更清晰?这取决于您的项目/组织的样式指南以及您更喜欢简洁还是明确。我个人偏好现在是 if((int)date("Hi") < 1400),但我不经常使用PHP。 - Merlyn Morgan-Graham

17
你可以直接传递时间。
if (time() < strtotime('2 pm')) {
   //not yet 2 pm
}

或者也可以明确地传递日期参数

if (time() < strtotime('2 pm ' . date('d-m-Y'))) {
   //not yet 2 pm
}

7

使用24小时制来解决问题,方法如下:

$time = 1400;
$current_time = (int) date('Hi');
if($current_time < $time) {
    // do stuff
}

所以,24小时制中的2PM等同于14:00。如果我们从时间中移除冒号,则可以将其作为整数进行比较。

有关日期函数的更多信息,请参阅PHP手册。我使用了以下时间格式:

H = 小时的24小时格式(00至23)

i = 带前导零的分钟数(00至59)


多年后,有趣的是你不必将带有冒号的时间转换为整数。PHP比较运算符足够聪明,知道'13:00'小于'14:00'! - Mike Kormendy

3
您没有告诉我们您正在使用哪个版本的PHP,尽管假设它是PHP 5.2.2+,那么您应该能够像这样操作:
$now = new DateTime();
$twoPm = new DateTime();
$twoPm->setTime(14,0); // 2:00 PM

那就请问吧:
if ( $now < $twoPm ){ // such comparison exists in PHP >= 5.2.2
    // do this
}

否则,如果您正在使用旧版本(例如5.0),则以下内容应该起作用(而且更加简单):

$now = time();
$twoPm = mktime(14); // first argument is HOUR

if ( $now < $twoPm ){
    // do this
}

2
如果你想检查时间是否在下午2:30之前,可以尝试以下代码段。
if (date('H') < 14.30) {
   $pre2pm = true;   
}else{
   $pre2pm = false;
}

0
使用time()date()strtotime()函数:
if(time() > strtotime(date('Y-m-d').' 14:00') {
    //...
}

0

尝试使用

if( time() < mktime(14, 0, 0, date("n"), date("j"), date("Y")) ) {

// do this

}

0

此函数将通过接受两个参数,包含小时和上午/下午的数组,检查它是否在东部标准时间内。

    /**
     * Check if between hours array(12,'pm'), array(2,'pm')
     */
    function is_between_hours($h1 = array(), $h2 = array())
    {
        date_default_timezone_set('US/Eastern');
        $est_hour = date('H');

        $h1 = ($h1[1] == 'am') ? $h1[0] : $h1[0]+12;
        $h1 = ($h1 === 24) ? 12 : $h1;

        $h2 = ($h2[1] == 'am') ? $h2[0] : $h2[0]+12;
        $h2 = ($h2 === 24) ? 12 : $h2;

        if ( $est_hour >= $h1 && $est_hour <= ($h2-1) )
            return true;

        return false;
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接