PHP Время после полуночи - PullRequest
0 голосов
/ 17 февраля 2009

У меня есть массив раз, которые я хочу распечатать. Я хочу, чтобы прошедшие времена, скажем, 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 часов с каждым значением. Проблема возникает при изменении времени после полуночи, например, 00:15. Как я могу рассчитать и распечатать список по порядку, когда время прошло полночь?

Ответы [ 6 ]

5 голосов
/ 17 февраля 2009

если вы минуете полночь, то участвует более одного дня. это означает, что вы должны включить информацию дня! какой это день? поэтому, чтобы достичь того, чего вы хотите, вы должны перечислять / хранить больше, чем просто время! если вы сохраните значение datetime, у вас не возникнет проблем с вычислением разницы во времени, поскольку php будет знать, в каком порядке выставлять время в соответствии с информацией о дне.

для этого взгляните на функции php datetime .

они также помогут вам рассчитать разницу!

1 голос
/ 06 декабря 2012

Я решил эту проблему следующим образом. Это не лучшее решение, но, по крайней мере, оно работает:

$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>";
1 голос
/ 17 февраля 2009

Как сказал Свиш, вы должны использовать реальные метки времени, а также проверять изменение даты ... вот, я думаю, более быстрый и простой способ узнать разницу между 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  ]]]]]]] )
1 голос
/ 17 февраля 2009

Использовать метки времени Unix. создайте метку времени Unix для полуночи, а затем сравните все остальные с этим. Затем отформатируйте его как время распечатки.

(Некоторое время назад я использовал PHP, поэтому не могу вспомнить, как это сделать, но должен быть простым. Я знаю, что раньше делал нечто подобное. Посмотрите на http://php.net/time, http://php.net/manual/en/function.mktime.php и http://php.net/manual/en/function.date.php. Должно быть достаточно просто =)

0 голосов
/ 17 февраля 2009

У вас есть строка ('12:00'), и вы пытаетесь сравнить ее как число.

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

Как сказали Свиш и Пол, вам нужно использовать целочисленные метки времени.

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

0 голосов
/ 17 февраля 2009

Re. Предложение Свиша - strtotime () удобен для простого создания меток времени Unix относительно текущего времени или любого произвольного времени.

например. strtotime ('полночь') даст вам метку времени Unix для самой последней полуночи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...