date () возвращает неправильный день, хотя отметка времени верна! - PullRequest
5 голосов
/ 10 апреля 2010

У меня странная проблема с функцией php date.

код:

$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
}

результат на моем сервере (локальный хост, windows):

Сб, 6 ноября 2010

вс, 7 ноября 2010

Пн, 08 ноября 2010

Вт, 09 ноября 2010

Ср, 10 ноября 2010

чт, 11 ноября 2010

Пт, 12 ноября 2010

Сб, 13 ноября 2010

Результат на моем веб-сервере (linux)

Сб, 06 ноября 2010

* вс, 7 ноября 2010

вс, 7 ноября 2010 *

Пн, 08 ноября 2010

Вт, 09 ноября 2010

Ср, 10 ноября 2010

чт, 11 ноября 2010

Пт, 12 ноября 2010

Обратите внимание, как Sun, 07 ноября 2010, появляется дважды на удаленном сервере ?? Почему это происходит? Кто-нибудь может объяснить это поведение?

Ответы [ 4 ]

8 голосов
/ 10 апреля 2010

7 ноября 2010 года - это дата перехода на летнее время во многих часовых поясах (но не в Греции, где вы, кажется, находитесь). От Википедия :

Начиная с 2007 года большинство Соединенных Штатов и Канады отмечают летнее время со второго воскресенья марта до первого воскресенья ноября, почти две трети года.

В Греции это, кажется, 31 октября . Какой часовой пояс вы установили на своем компьютере?

2 голосов
/ 10 апреля 2010

Хорошей практикой является вычисление времени в UTC, а затем преобразование их в необходимый часовой пояс для местоположения пользователя с использованием функций даты и времени PHPs:

date_default_timezone_set('UTC');
$timezone = new DateTimeZone('Europe/Athens');
$datetime = new DateTime('now', $timezone);
echo $datetime->format('Y-m-d H:i:s');
2 голосов
/ 10 апреля 2010

Сложно быть здесь уверенным, но может ли проблема быть вызвана переходом на летнее время в часовом поясе удаленного сервера?

В большинстве стран переход обычно происходит в выходные дни, и, поскольку день увеличивается на час, это один из случаев, когда добавление 86400 секунд к значению времени не возвращает дату после этого.

1 голос
/ 10 апреля 2010

Запустите ваш код с начальной датой +1 час, а затем -1 час и посмотрите, какие результаты вы получите. Вы получите больше подсказок и, скорее всего, это связано с переходом на летнее время.

Также, как указал Пекка, попробуйте то же самое с датой, установленной на 31 октября, и посмотрите, что произойдет.

Хороший вопрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...