【问题标题】:time compare with H:i in PHP时间与 PHP 中的 H:i 比较
【发布时间】:2013-12-27 16:04:17
【问题描述】:

我正在尝试将时间与当前时间进行比较,但现在多次尝试都失败了。

我试过比较
日期('U')到'08:00',
时间()到“08:00”,
日期('H:i') 到 '08:00'
strrotime('08:00') 到 time() 或 date('U')

在我最近的尝试中,如下所示,试图比较 strrotime('08:00'.':00' ) 到 time() 或 date('U')

如果我将我的值保留为“08:00”,我会收到一个错误,它无法转换为时间,如果我尝试 strtotime,我会收到一个错误,它需要一个字符串作为参数,而不是像我这样的日期对象通过...我没有通过任何对象,只是一个包含字符串'08:00'的变量...

我最近尝试的代码:

if ($sleepSettings <> null) {
    if (is_array($sleepSettings)) {
        $containerHelper[$c->getId()]['wakeup'] = $sleepSettings['wakeup_s'];
        $containerHelper[$c->getId()]['sleep'] = $sleepSettings['sleep_s'];

        if (strtotime($sleepSettings['wakeup'] . ':00') < time() && time() < strtotime($sleepSettings['sleep'] . ':00')) {
            $containerHelper[$c->getId()]['asleep'] = false;
        } else {
            $containerHelper[$c->getId()]['asleep'] = true;
        }
    }
}

【问题讨论】:

    标签: php date datetime time


    【解决方案1】:

    如果您想查看当前时间是否唤醒和睡眠时间之间,杰西卡的回答不会。假设 $wakeup_time 类似于 '07:00' 而 $bed_time 类似于 '23:00',您可能希望将它们应用于任何一天,因此与 time() 进行比较是行不通的。您需要获取 $timeNow 并分别比较小时和分钟。比如:

    $wakeup_time = explode(':', $wakeup_time);
    $bed_time    = explode(':', $bed_time);
    $timeNow = array(date('H'), date('i'));
    // the three times are separate hour and minute elements
    if (($timeNow[0] == $wakeup_time[0] && $timeNow[1] >= $wakeup_time[1] ||
         $timeNow[0]  > $wakeup_time[0] ) &&
        ($timeNow[0] == $bed_time[0] && $timeNow[1] < $bed_time[1] ||
         $timeNow[0]  < $bed_time[0]) ) {
       // awake
    } else {
       // asleep
    }
    

    这是一种方式。您还可以使用今天的日期为起床和就寝时间合成一个 time():

    $wakeup_timestamp = strtotime(date('Y-M-d ').$wakeup_time);
    $bed_timestamp    = strtotime(date('Y-M-d ').$bed_time);
    if (time() >= $wakeup_timestamp && time() < $bed_timestamp) {
      // awake
    } else {
      // asleep
    }
    

    【讨论】:

      【解决方案2】:

      strtotime 想要转换成一个包含日期和时间的 unix 时间戳。

      您只想比较当前时间和那个时间?

      <?php
      $nowTime = date('H:i');
      var_dump($sleepSettings['wakeup'].':00' == $nowTime); 
      // Should be a boolean either true or false.
      

      您可以比较两个字符串。

      事实上,如果您只是想计算时间(因为您要添加:00),您可以只使用date('H') 而不要添加':00'

      【讨论】:

        【解决方案3】:

        您似乎只想比较日期的时间部分。 time() 函数将返回自 Unix 纪元(格林威治标准时间 1970 年 1 月 1 日 00:00:00)以来的秒数,其中包括这一天,因此从您的代码中,您将字符串 '08:00' 与 1 月 1 日的秒数进行比较1970 年。

        如果您只想比较日期的时间部分,请将所有内容都转换为分钟。例如:

        $wake_hour = 8;
        $wake_mim = 0;
        $wake_total = ($wake_hour * 60) + $wake_mim;
        
        $sleep_hour = 10;
        $sleep_mim = 0;
        $sleep_total = ($sleep_hour * 60) + $sleep_mim;
        
        $now_hour = date('H');
        $now_mim = date('i');
        
        $now_total = ($now_hour * 60) + $now_mim;
        
        if ($now_total > $wake_total && $now_total < $sleep_total) {
            echo 'Wake up and conquer the world!!!';
        }
        

        【讨论】:

          猜你喜欢
          • 2018-10-18
          • 1970-01-01
          • 2011-08-13
          • 2011-09-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多