14 Mart 86400 saniye uzun değil?

6 Cevap

Benim web uygulaması, ben Kullanıcıların giriş basit bir metin kutusuna bir tarih var. (Tabii dezenfekte edildikten sonra,) o giriş,) (strtotime aracılığıyla çalıştırılır ve 86399 yazılı gün (11:59:59) ucunu damgası yapmak için, buna ilave edilir. Bu vadesi amaçlıdır (yani tarih geçerse, uygulama bir bayrak yükseltir)

Ben test gündür, işe yaradı ...

5 Ocak günün sonunda, 5 Ocak olarak kaydedilir.

13 Mart olarak kaydedilen 13 Mart

15 Mart olarak kaydedilen 15 Mart

14 Mart, ne sebeple olursa olsun, 15 Mart olarak kendini kurtardı.

14 Mart bir kaç saniye kısa falan gizemli mi?


Güncellemek: Teşekkürler çözüm için oezi için - bir cazibe gibi çalıştı. Kod istendiği gibi:

Eski kodu:

if ($_POST['dateto'] != '') {
    $dateto = strtotime(mysql_real_escape_string($_POST['dateto'])) + 86399;
}

Yeni kodu:

# Offset to "end of day"
list($y,$m,$d) = explode('-',date("Y-m-d",strtotime($_POST['dateto'])));
$d++;
$dateto = strtotime($y . '-' . $m . '-' . $d) - 1;

6 Cevap

Diğerleri de söylediğim gibi, bu, çünkü yaz saati olduğunu. Bu sorunu çözmek için, bunu yapabilirsiniz:

<?php
list($y,$m,$d) = explode('-',date("Y-m-d",strtotime($date_from_user)));
$h = 23;
$i = 59;
$s = 59;
$mytimestamp = "$y-$m-$d $h:$i:$s";
?>

14 Mart 2010 Yaz Saati Amerika Birleşik Devletleri'nde başlayan günüdür. Eğer yerel saat diliminde matematik yapıyoruz Yani 14 Mart sadece 23 saat uzun.

Bu daylight savings time başlangıcıdır çünkü varsayılabilir

Ne veritabanı kullanıyorsunuz? Bunu yapmak için daha iyi bir yolu (çoğu tarih işleme komutları veritabanı özgü) olması zorunludur. SQL Server, ben sadece bugüne kadar 1 gün eklemek ve daha sonra ikinci 1 çıkarmak istiyorum:

DECLARE @YourDate datetime
SET @YourDate='2010-03-14'

SELECT DATEADD(ss,-1,@YourDate+1)

ÇIKIŞ:

-----------------------
2010-03-14 23:59:59.000

(1 row(s) affected)

bu değer ne için, ben çok bir durum olması tercih ediyorum: < NextDay daha <=CurrentDay12_59_59

Bütün zaman dilimleri içinde "destek" daylight savings time, iki gün 24 saat yok, bir sene alırsınız. Bunlar sırasıyla 25h veya 23h olacak. Ve hatta bu tarihleri ​​hardcoding sanmıyorum. Onlar her yıl değişir ve zaman dilimleri arasında.

Oh, ve burada 34 other reasons that you hadn't thought about, and why you shouldn't do what you're doing bir listesi.

http://tycho.usno.navy.mil/leapsec.html

Tüm gün 86400 saniye uzunluğunda.

Bu nadir bir olaydır. Ve (tarihsel) Mart planlanan asla.