У меня проблема с функцией bizzare с функцией php date.
код:
$numDays = 8; $date = strtotime('2010-11-06'); for ($i=1; $i<=$numDays; $i++) { $thisDay = date("D, d MY", $date); print ($thisDay.'<br>'); $date+=86400; // add one day to timestamp }
результат на моем сервере (локальный хост, окна):
Сб, 06 ноя 2010
Вс, 07 Ноя 2010
Пн, 08 ноя 2010
Вт, 09 ноя 2010
Ср, 10 ноя 2010
Чт, 11 ноября 2010
Пт, 12 ноября 2010
Сб, 13 ноября 2010
Результат на моем веб-сервере (linux)
Сб, 06 ноя 2010
* Вс, 07 ноя 2010
Вс, 07 Ноя 2010 *
Пн, 08 ноя 2010
Вт, 09 ноя 2010
Ср, 10 ноя 2010
Чт, 11 ноября 2010
Пт, 12 ноября 2010
Обратите внимание, как Sun, 07 ноября 2010 года появляется дважды на удаленном сервере? Почему это происходит? может ли кто-нибудь объяснить это Поведение?
7 ноября 2010 года – дата переключения DST во многих часовых поясах (но не в Греции, где вы, похоже, находитесь). Из Википедии :
Начиная с 2007 года, большинство Соединенных Штатов и Канады наблюдают DST со второго воскресенья марта до первого воскресенья ноября почти две трети года.
В Греции, похоже, 31 октября . Какой часовой пояс у вас установлен на вашем компьютере?
Здесь трудно быть уверенным, но могли ли проблемы возникнуть в результате перехода на летнее время в часовой пояс удаленного сервера?
В большинстве стран переход обычно происходит в выходные дни, и, поскольку день продлен на час, это один случай, когда добавление 86400 секунд к значению времени не вернет дату после этого.
Запустите свой код с датой начала +1 час, а затем на 1 час и посмотрите, какие результаты вы получите. Вы получите больше подсказок, и, скорее всего, это связано с летним временем.
Кроме того, как отметил Пекка, попробуйте то же самое с датой, установленной 31 октября, и посмотрите, что произойдет.
Хороший вопрос.
Хорошая практика делать расчеты времени в формате UTC, а затем преобразовывать их в требуемый часовой пояс для местоположения пользователя с использованием функций datetime PHP:
date_default_timezone_set('UTC'); $timezone = new DateTimeZone('Europe/Athens'); $datetime = new DateTime('now', $timezone); echo $datetime->format('Ymd H:i:s');