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