14 марта не 86400 секунд?

В моем веб-приложении у меня есть пользователь, вводящий дату в простом текстовом поле. Этот ввод (после дезинфекции, конечно) выполняется через strtotime (), и к нему добавляется 86399, чтобы сделать эту метку в конце дня (11:59:59). Это предназначено для срочных целей (поэтому, если дата проходит, приложение поднимает флаг)

В те дни, когда я тестировал, он работал …

5 января сохранено 5 января, в конце дня.

13 марта сэкономлено 13 марта

15 марта сэкономлено 15 марта

14 марта, по какой-то причине, спасла себя как 15 марта.

14 марта загадочно пару секунд коротки или что-то?


Обновление: благодаря oezi для решения – работал как шарм. Код в соответствии с запросом:

Старый код:

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

Новый код:

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

Как говорили другие, это связано с летним временем. Чтобы решить эту проблему, вы можете сделать следующее:

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

14 марта 2010 года – это день перехода на летнее время в США. Поэтому, если вы делаете математику в местном часовом поясе, 14 марта всего 23 часа.

Я бы предположил, потому что это начало летнего времени

Какую базу данных вы используете? должен быть лучший способ сделать это (большинство команд управления датой являются специфичными для базы данных). В SQL Server я просто добавляю 1 день к дате, а затем вычитаю 1 секунду:

 DECLARE @YourDate datetime SET @YourDate='2010-03-14' SELECT DATEADD(ss,-1,@YourDate+1) 

ВЫВОД:

 ----------------------- 2010-03-14 23:59:59.000 (1 row(s) affected) 

для чего это стоит, я бы предпочел бы иметь условие: < NextDay than <=CurrentDay12_59_59

Во всех часовых поясах, которые «поддерживают» летнее время , вы получите два дня в году, которые не имеют 24 часа. У них будет 25 или 23 часа соответственно. И даже не думайте о жестком кодировании этих дат. Они меняются каждый год, а также между часовыми поясами.

О, и вот список из 34 других причин, о которых вы не думали, и почему вы не должны делать то, что делаете .

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

Не все дни составляют 86400 секунд.

Это редкое событие. И (исторически) никогда не планировалось в марте.