Iki tarih, PHP görmezden yaz saati çıkarmak için nasıl?

4 Cevap php

Ben iki gün arasındaki gün sayısını hesaplamak için çalışıyorum, ama ben yaz saati ile sorunlar çalıştırıyorum. İşte benim kod:

function date_diff($old_date, $new_date) {
    $offset = strtotime($new_date) - strtotime($old_date);
    return $offset/60/60/24;
}

Sürece gün aynı DST süre içinde her ikisi gibi çalışıyor:

echo date_diff('3/15/09', '3/18/09'); // 3

Ama onlar daha fazla ayrı değilsen:

echo date_diff('11/15/08', '3/18/09'); // 122.95833333333

Ben gün bir hatta numara istiyorum ve DST umurumda değil. Ben sonuç sarabilirsin varsayalım, ama o kıytırık hissediyor. Bir daha iyi (kolay) yolu var mı? Ben bunu önleyebilirsiniz eğer ben gün-ayrıştırma-ve-sayma-kaçınarak-sıçrama yılı şey bir bütün yazmak zorunda istemiyorum.

(Not: Bu php 5.1.6 altında çalıştırmak zorunda, yani 5.3 tarih bazı özellikleri mevcut olmayabilir.)

Biraz daha fazla bilgi: Ben ofset almak ve bir db olan diğer tarihsaat eklemek için gidiyorum ve ben zaman parçası değil, sadece günlük kısmı değiştirmek istiyorum. Ben ekleme yapmak zaman diğer yönde kapalı bir saat alır çünkü yuvarlama, zaten çalışmaz çıkıyor. Belki de bütün sorun için daha iyi bir yaklaşım var ....

4 Cevap

hiçbir ofset orada olacak şekilde http://ca3.php.net/date_default_timezone_set GMT dilimini ayarlamak için kullanabilirsiniz.

Alternatif olarak, el bir tarih kullanılarak offset ('I', $ timetamp) ekleyebilir

if ( date("I") == 1 ) { // "WE ARE MDT";
$timeZone = "MDT";
} else {
$timeZone = "MST";
}

Yaz Saati, GMT / UTC olmadan bir zaman dilimi içine yaşamak tarihleri ​​zorla:

function date_diff($old_date, $new_date) {
  $offset = strtotime($new_date . " UTC") - strtotime($old_date . " UTC");
  return $offset/60/60/24;
}

echo date_diff('3/15/09', '3/18/09'); // 3
echo date_diff('11/15/08', '3/18/09'); // 123

Yukarıda 'UTC' kod çalıştı. Benim için işe yaramadı. Ben stll ondalık değerleri var.

Gün ışığından tasarruf tarih tarih aralığında olduğunda fark seri ondalık kısmı 0,5 altında veya üstünde ya olacak. tarih aralığı gün ışığı tasarrufu 3/15 devam zaman gün ışığı tarih ondalık gidiyor zaman ondalık değer> .5 < .5. bu yüzden sadece yuvarlak () fonksiyonu farkı serisini koymak ve ben gün sayısı için gereken bütün numaraları olsun.