PHP Zaman sonra gece yarısı sorun

6 Cevap php

Ben dışarı yazdırmak istediğiniz zamanlarda bir dizi var. Ben geçti Zamanlar sağlar 12:00 saati 'silik' olmak demek istiyorum.

$ 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

Im doing a simple compare 12:00 a clock to each value. The problem occurs when you change the time to after midnight for example 00:15. How can I calculate and print the list in order, when time has passed midnight?

6 Cevap

Eğer gece yarısı geçmesi halinde, bir günden fazla ilgilenmektedir. Bu günün bilgileri içerecek şekilde var demektir! Bu hangi gün? böylece size daha fazla zaman adil daha / mağaza listelemek gerektiğini istediklerini elde etmek için! Bir datetime değerini saklamak eğer php gün bilgilerine göre süreleri ne koymak amacıyla bilecek beri, sen, zaman farkları hesaplanırken hiçbir sorun yaşamayacaksınız.

o php datetime functions bakmak için.

onlar da farklılıkları hesaplamak için yardımcı olacaktır!

Unix zaman damgaları kullanın. Gece yarısı için bir unix zaman damgası oluşturun ve sonra buna tüm diğerleri karşılaştırın. Sonra bunu yazdırabilirsiniz bir zaman olarak biçimlendirmek.

(Bir süre ben PHP kullanılan yüzden bunu yapmak için oldukça nasıl hatırlıyorum, ama basit olmalıdır. Ben daha önce benzer bir şey yaptım biliyorum. Bir göz atın http://php.net/time, {[(1) olamaz çünkü ]} ve http://php.net/manual/en/function.date.php. yeterince basit olmalı =)

Svish dediği gibi, gerçek zaman damgaları kullanmanız gerekir, ve burada da, ben, 2 kez (ve tarih) arasındaki farkı bilmek için daha hızlı ve kolay bir şekilde düşünüyorum ... tarih değişikliği kontrol etmelidir:

<?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 ve $ date2 gibi, mktime formatında olmak zorunda notu

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  ]]]]]]] )

Ben aşağıdaki gibi bu sorunu çözdü. Bu en iyi çözüm değil ama en azından çalışır:

$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>";

Sen ('12:00') bir dize var ve bir dizi gibi karşılaştırmak için çalışıyoruz.

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

Svish ve Paul dediğim gibi, tamsayı damgaları kullanmanız gerekir.

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

Sen date fonksiyonu ile damgaları biçimlendirebilirsiniz.

Re. Svish önerisi - strtotime () kolayca şimdiki zaman, ya da herhangi bir keyfi zaman göreceli UNIX zaman oluşturmak için kullanışlıdır.

örneğin strtotime ('gece yarısı') En son gece yarısı için size unix zaman damgası verecektir.