PHP вычисления с учетом времени () и DST - PullRequest
2 голосов
/ 04 ноября 2011

Я использую скрипт, который вставляет дату (гггг-мм-дд), которая на X дней позже текущей даты.Я добавляю X секунд к первой отметке времени, чтобы получить вторую, в 12:00 утра.

Часовой пояс сервера - UTC-5, и я также устанавливаю его в своих сценариях с помощью

date_default_timezone_set('America/Montreal');

Мы установим часы на один час назад 6 НОЯБРЯ, и любые математические вычисления с time () кажутся затронутыми. (Когда летнее время заканчивается осенью, часы сбрасываютсячас и возобновляется стандартное время.)
В 2:00 утра 6 ноября будет 1:00 *


Например, отметка времени 1: 1320379200 (Пятница 4-е ноябрь 2011 12:00:00, ДО изменения времени)
Я хочу добавить 7 дней к этой дате ... 1320379200 + (7 * 24 * 60 * 60)

Отметка времени новой даты теперь 1320984000 (четверг 10 ноябрь 2011 г. 23:00:00, ПОСЛЕ изменения времени)
, но она должна быть 1320987600 (пятница 11 ноября 2011 г. 12:00:00:00)
Мне не хватает 3600 секунд, поэтому один час.


Просто чтобы прояснить это (псевдокод):

$timestampOfStartingDate = 1320379200   
echo timestampToDate($timestampOfStartingDate) // show 2011-11-04 (Friday 4th November 2011 12:00:00 AM)

$newTimestampAfter7days = $timestampOfStartingDate + (7 * 24 * 60 * 60)  
echo timestampToDate($newTimestampAfter7days)  // show 2011-11-10 instead of 2011-11-11 (Thursday 10th November 2011 11:00:00 PM instead of Friday 11th November 2011 12:00:00 AM)

Так что мне не хватает одного часа, что, вероятно, связано с переходом на летнее время.


Дело в том, что я не знаю, как это исправить.Я не хочу делать это заново, когда мы снова войдем в летнее время.

Надеюсь, вы, ребята, понимаете, что я говорю, потому что я немного растерялся.Также прошу прощения за мой английский, я делаю все возможное!

1 Ответ

2 голосов
/ 04 ноября 2011

Вы должны добавить 7 дней, а не x количество секунд.

strtotime("+7 days", $timestampOfStartinDate);

В качестве альтернативы используйте PHP DateTime класс .

...