Yanlış Zaman dönen mktime işlevi?

3 Cevap php

Ben mktime fonksiyonu ile sorun biraz yaşıyorum. Benim üretim sunucusunda, ben aşağıdaki yürütmek eğer:

echo '<p>' . mktime(24, 0,0, 8,29,2009) . ' - 12pm</p>';
echo '<p>' . mktime(23, 0,0, 8,29,2009) . ' - 11pm</p>';
echo '<p>' . mktime(22, 0,0, 8,29,2009) . ' - 10pm</p>';

Ve sonra (www.unixtimestamp.com hızlı dönüşüm için kullanılarak) geri okunabilir bir biçime bu damgaları dönüştürmek, tüm saatler bir saat kapalı. Ben aslında bu 2400 VS 0000 ile ilgili bir sorun olduğunu düşündüm, ama bu diğer tarihler kapalı olduğu için hesap olmaz.

Herhangi bir fikir?

3 Cevap

Sunucu bekliyoruz daha farklı bir zaman dilimi vardır. Unix damgaları 1970/01/01 00:00:00 GMT beri saniye cinsinden ölçülür, böylece kodda bir gizli zaman dilimi dönüşüm vardır. Sen Ya

Ben sadece komut satırından aşağıdaki koştu ve (beklenen) aşağıdaki çıktıyı aldım. Eğer bunları çalıştırmak ne olur?

$ php -r "echo date('H:i:s Y-m-d', mktime(24, 0, 0, 8, 29, 2009));"
00:00:00 2009-08-30

$ php -r "echo date('H:i:s Y-m-d', mktime(23, 0, 0, 8, 29, 2009));"
23:00:00 2009-08-29

$ php -r "echo date('H:i:s Y-m-d', mktime(22, 0, 0, 8, 29, 2009));"
22:00:00 2009-08-29

Benim sveyaun olduğunu mktime I girişi ile gün ve ay leading zeros. Fonksiyon bana yanlış sonuçlar döndü daha. Bir seçenek gibi bir işlevle lider sıfır kaldırmak olacaktır

$str = ltrim($str, '0');

Source: PHP String Remove All Leading Zeroes

veya

$var = (int)$var;

Source: PHP remove first zeros

Ben soulmerge gelen bir olasılık kullandı:

$date = new DateTime($year . '-' . $month . '-' . $day . ' ' . $hour . ':' . $minute . ':' . $seconds);
$match_time = $date->getTimestamp();

But the timezone should be always set (either with date_default_timezone_set() veya directly with DateTime.