时间与H:i在PHP中比较

时间:2013-12-27 16:04:17

标签: php date datetime time

我正在尝试将时间与当前时间进行比较,并且现在已经多次尝试失败。

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

并在我最近的尝试中,尝试比较 strrotime('08:00'。':00')到时间()或日期('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;
        }
    }
}

3 个答案:

答案 0 :(得分:0)

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'

答案 1 :(得分:0)

看起来你想比较日期的时间部分。 time()函数将返回自Unix Epoch(1970年1月1日00:00:00 GMT)以来的秒数,其中包括当天,因此从您的代码中您将字符串'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!!!';
}

答案 2 :(得分:0)

如果你想看看当前时间在唤醒和睡眠时间之间,杰西卡的回答是不行的。假设$ 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
}

这是一种方式。您还可以使用今天的日期合成唤醒和睡觉时间的时间():

$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
}