PHP午夜问题后的时间

时间:2009-02-17 12:17:18

标签: php time

我有一些时间要打印出来。我想要已经过去的时间让我们说12:00时钟是'灰色'。

$ theTime = '12:00';

if($ theTime> = $ time [$ i]) {....}

02:30
03:50
03:20
04:50
05:45
19:45
20:00
20:50
20:55
21:25
21:30
22:00
22:45
23:55
00:50
00:55

我正在做一个简单的比较12点钟到每个值。 当您将时间更改为午夜之后(例如00:15)时会发生此问题。当时间过了午夜时,如何按顺序计算和打印列表?

6 个答案:

答案 0 :(得分:5)

如果你过了午夜,则涉及一天以上。这意味着您必须包含当天的信息!今天是星期几?所以为了达到你想要的效果,你应该列出/存储的不仅仅是时间!如果你存储一个日期时间值,你就不会有计算时差的问题,因为php会根据日期信息知道按时间顺序排列时间。

查看php datetime functions

他们也会帮助你计算差异!

答案 1 :(得分:1)

使用unix时间戳。为午夜创建一个unix时间戳,然后将所有其他时间戳与之比较。然后将其格式化为打印出来的时间。

(因为我使用过PHP,所以不记得怎么做,但应该很简单。我知道我之前做过类似的事情。看看http://php.net/time,{{3} }和http://php.net/manual/en/function.mktime.php。应该很简单=)

答案 2 :(得分:1)

正如Svish所说,你应该使用真正的时间戳,你还应该检查日期变化......我认为,这里更快速,更简单地了解2次(和日期)之间的差异:

<?php
$dateDiff = $date1 - $date2;
$fullDays = floor($dateDiff/(60*60*24));
$fullHours = floor(($dateDiff-($fullDays*60*60*24))/(60*60));
$fullMinutes = floor(($dateDiff-($fullDays*60*60*24)-($fullHours*60*60))/60);
echo "Differernce is $fullDays days, $fullHours hours and $fullMinutes minutes.";
?> 

请注意$ date1和$ date2必须采用mktime格式,如下:

int mktime  ([ int $hour=date("H")  [, int $minute=date("i")  [, int $second=date("s")  [, int $month=date("n")  [, int $day=date("j")  [, int $year=date("Y")  [, int $is_dst=-1  ]]]]]]] )

答案 3 :(得分:1)

我解决了这个问题如下。它不是最好的解决方案,但至少它有效:

$before_midnight = strtotime("23:59:59");
$before_midnight++; // this makes exact midnight
$start = strtotime("21:00");
$target = strtotime("03:00");
$after_midnight = strtotime("00:00");

for($i=$start; $i<$before_midnight; $i += 3600)
    echo date("H:i", $i). "<br>";

for($i=$after_midnight; $i<=$target; $i += 3600)
    echo date("H:i", $i). "<br>";

答案 4 :(得分:0)

重新。 Svish的建议 - strtotime()可以方便地创建相对于当前时间或任意时间的Unix时间戳。

e.g。 strtotime('midnight')将为您提供最近午夜的unix时间戳。

答案 5 :(得分:0)

你有一个字符串('12:00')并且正在尝试将其比作数字。

http://us3.php.net/manual/en/language.operators.comparison.php

像Svish和Paul所说,你需要使用整数时间戳。

$now = time(); // Get the current timestamp

$timestamps= array(strtotime('midnight'),
                   strtotime('07:45'), 
                    ...
                   );

foreach ( $timestampsas $time ) {
    if ( $time >= $now ) {
        // $time is now or in the future
    } else {
        // $time is in the past
    }
}

您可以使用date功能格式化时间戳。