Neden PHP date () fark hesaplanmasında 1 saat ekliyor?

4 Cevap php

Ben bu yüzden burada soru, çevrelerinde çalışan düşünüyorum, ancak ben zor bir soru tür var, ben zaten, Stackoverflow her ilgili soruyu aradı ve benim ne conundrum çözüldü:

Ben bu kod var:

$val = (strtotime('2010-03-22 10:05:00')-strtotime('2010-03-22 09:00:00'))

Bu doğru döner $ val = 3900 (3600 saniye = 1 saat, 300 saniye = 5 dakika)

Ama bu yapıyor:

echo date("H:i",$val)."<br>";

02:05 döner

Hatta bu yapıyor:

echo date("H:i",3900)."<br>";

02:05 döner (just to be naively sure)

Bu yapıyor:

echo date("H:i eTO",3900)."<br>";

iadeler

02:05 System/LocaltimeCET+0100

Hangisi doğru, benim dilimi CET ve +1 dir.

Ne oluyor? Tarih () nedense dilimini düzeltme? Ya da ben yanlış bir şey yapıyorum?

4 Cevap

Tarihini kullanarak (,) çağı (00:00:00 1 Ocak 1970 UTC) + damgası saniye sayısını döndürür çünkü bu oluyor. Bu timezone kendisini lokalize, bu yüzden 0 bir zaman damgası ile sağlanan eğer 01:00:00 1 Ocak 1970 UTC +1 dönecekti.

Evet, bu zaman dilimini düzeltiyor. Bunu yaptığınızda

$val = (strtotime('2010-03-22 10:05:00')-strtotime('2010-03-22 09:00:00'))

, Ne depolanan $val 01:05, 1 Ocak 1970 UTC için bir zaman damgası. Bkz Wikipedia's article on Unix Time.

Iki zaman damgaları arasındaki fark ile çalışıyorsanız, ben DateTime::diff (PHP 5.3 gerektirir) kullanarak öneririm.

Ben yaptım:

date_default_timezone_set('Europe/Helsinki');

GMT hangi +02:00

ve sonuç oldu:

03:05 Europe/HelsinkiEET+0200

Date () "1 Jan 1970 GMT" KAYNAKLANAN saniye sayar yüzden benim timezone ve örnekte aslında 3900 [{doğru olduğunu: Yani, aslında zaman dilimi için düzeltme IS, açıklama şimdi (ben bir görünüş vardı) oldukça basit olarak bulundu (1)]} bu tarihten itibaren ...

Kendi kendine öğrenme 1-_-'

Tarih yerel saatle birlikte çalışır ve GMT +1 üzerinde, çünkü bu, aslında doğru davranıştır. Bunu 1/1/1970 01:05 ve sadece reklamları 1. timezone onu almak için bir zaman damgası (3900) verir.

Bu sadece doğru değeri elde etmek için makine ofset GMT çıkarma yerine, amaçlanan kullanımı ise.