![]() |
|
||||||||||
|
|||||
|
Регистрация: Feb 2002
Адрес: Саратов
Сообщений: 93
|
Помогите, не могу понять.
Ситуация такая: существует форум на PHP + MySQL. Когда юзер пишет в него новое сообщение, определяется время сервера: $d=gmdate("U"); Затем к этому значению прибавляется 3 часа, чтобы время стало Московским: $d=$d+10800; Затем полученное значение заносится в базу данных. Затем при просмотре форума из БД извлекается это значение и вычисляется дата и время: $date=getdate(d); Все это прекрасно работало до падения сервера. После того, как его подняли и заодно установили на нем Московское время, в коррекции времени на 3 часа отпала необходимость. НО ! Время отправки всех старых сообщений тоже изменилось на 3 часа ! Как это может быть ?
__________________
Funciona situando las manos bajo el secador |
|
|||||
|
"Вождь"
|
предлагаю пользоваться функциями mysql вроде NOW(), а при выводе просто спрашивать смещение у пользователя.
__________________
а мы летим орбитами путями не избитыми... |
|
|||||
|
Регистрация: Feb 2002
Адрес: Саратов
Сообщений: 93
|
Вот, выяснил:
Этап занесения скорректированной даты в БД здесь совершенно ни при чем. Все портит скрипт просмотра форума, в частности, функция getdate: Я посмотрел число секунд с 1970 года, занесенное в БД, рассчитал на калькуляторе день и время, и получилось 30 января 2004 г., 9 часов 12 минут. А РНР-функция getdate выдает 30 января 2004 г., 12 часов 12 минут. Какого черта, я не могу понять !!!
__________________
Funciona situando las manos bajo el secador |
|
|||||
|
Ветеран форума
|
потому что у тебя в базе время в GMT
а сервак перенастроили на московское время при выводе - getdate приплюсовывает положеные 3 часа... тебе нужен date() |
|
|||||
|
Регистрация: Feb 2002
Адрес: Саратов
Сообщений: 93
|
2 nagash
Спасибо. Если я правильно тебя понял, то механизм действия функции getdate следующий: из БД берется timestamp, вычисляется дата и время, затем берется отличие времени сервера от GMT, после чего полученное время корректируется на эту величину. И если так, то, копируя сайт и БД на другие сервера, я с помощью функции getdate буду получать везде разные результаты, а с помощью функции date - везде одинаковые ? Если не секрет, где об этом можно почитать ?
__________________
Funciona situando las manos bajo el secador |
|
|||||
|
Ветеран форума
|
|
|
|||||
|
Регистрация: Feb 2002
Адрес: Саратов
Сообщений: 93
|
Вроде разобрался:
1. Определяем timestamp: gmdate("U") - секунды с 1970 г. по Гринвичу; 2. Прибавляем 10800 секунд и заносим в БД - секунды с 1970 г. по Москве; 3. Выбираем timestamp из БД и форматируем: gmdate("j.m.Y &\\nb\sp; G:i", $timestamp) - получаем результат без коррекции с временем сервера. Таким образом, при изменении времени сервера или переходе на др. сервера время заносится и отображается исключительно московское и не зависит ни от чего. Кажись так. 2 nagash: А механизм работы функций даты и времени на www.php.net не описан. Если я не прав, то ткни меня носом, где, например, в описании getdate сказано, что получаемый с ее помощью результат корректируется на разницу между GMT и временем сервера ?
__________________
Funciona situando las manos bajo el secador |
|
|||||
|
Регистрация: Feb 2002
Адрес: Саратов
Сообщений: 93
|
Ага, а с переходом на летнее время опять появилась неправильность в один час, т.е. мы перешли на летнее, а сервер нет. Интересно, GMT вообще не предусматривает переходы на зимнее и летнее время, или админы должны вручную его на сервере подправлять ?
__________________
Funciona situando las manos bajo el secador |
![]() |
Часовой пояс GMT +4, время: 06:52. |
|
|
« Предыдущая тема | Следующая тема » |
|
|