Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Архив Flasher.ru > Программирование > PHP

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему  
Старый 04.02.2004, 10:16
telesar вне форума Посмотреть профиль Отправить личное сообщение для telesar Посетить домашнюю страницу telesar Найти все сообщения от telesar
  № 1  
telesar
 
Аватар для telesar

Регистрация: Feb 2002
Адрес: Саратов
Сообщений: 93
По умолчанию Загадка с датой-временем

Помогите, не могу понять.
Ситуация такая: существует форум на PHP + MySQL. Когда юзер пишет в него новое сообщение, определяется время сервера:

$d=gmdate("U");

Затем к этому значению прибавляется 3 часа, чтобы время стало Московским:

$d=$d+10800;

Затем полученное значение заносится в базу данных.
Затем при просмотре форума из БД извлекается это значение и вычисляется дата и время:

$date=getdate(d);

Все это прекрасно работало до падения сервера. После того, как его подняли и заодно установили на нем Московское время, в коррекции времени на 3 часа отпала необходимость.
НО !
Время отправки всех старых сообщений тоже изменилось на 3 часа ! Как это может быть ?
__________________
Funciona situando las manos bajo el secador

Старый 05.02.2004, 14:21
Nirva вне форума Посмотреть профиль Отправить личное сообщение для Nirva Посетить домашнюю страницу Nirva Найти все сообщения от Nirva
  № 2  
Nirva
"Вождь"
 
Аватар для Nirva

Регистрация: Jun 2002
Адрес: New Zealand
Сообщений: 4,600
Отправить сообщение для Nirva с помощью ICQ
предлагаю пользоваться функциями mysql вроде NOW(), а при выводе просто спрашивать смещение у пользователя.
__________________
а мы летим орбитами путями не избитыми...

Старый 05.02.2004, 17:35
telesar вне форума Посмотреть профиль Отправить личное сообщение для telesar Посетить домашнюю страницу telesar Найти все сообщения от telesar
  № 3  
telesar
 
Аватар для telesar

Регистрация: Feb 2002
Адрес: Саратов
Сообщений: 93
Вот, выяснил:
Этап занесения скорректированной даты в БД здесь совершенно ни при чем. Все портит скрипт просмотра форума, в частности, функция getdate:

Я посмотрел число секунд с 1970 года, занесенное в БД, рассчитал на калькуляторе день и время, и получилось 30 января 2004 г., 9 часов 12 минут.

А РНР-функция getdate выдает 30 января 2004 г., 12 часов 12 минут. Какого черта, я не могу понять !!!
__________________
Funciona situando las manos bajo el secador

Старый 06.02.2004, 20:14
nagash вне форума Посмотреть профиль Отправить личное сообщение для nagash Посетить домашнюю страницу nagash Найти все сообщения от nagash
  № 4  
nagash
Ветеран форума
 
Аватар для nagash

Регистрация: Jul 2001
Адрес: Москва
Сообщений: 3,088
Отправить сообщение для nagash с помощью ICQ
потому что у тебя в базе время в GMT
а сервак перенастроили на московское время
при выводе - getdate приплюсовывает положеные 3 часа...
тебе нужен date()

Старый 06.02.2004, 23:34
telesar вне форума Посмотреть профиль Отправить личное сообщение для telesar Посетить домашнюю страницу telesar Найти все сообщения от telesar
  № 5  
telesar
 
Аватар для telesar

Регистрация: Feb 2002
Адрес: Саратов
Сообщений: 93
2 nagash

Спасибо. Если я правильно тебя понял, то механизм действия функции getdate следующий:
из БД берется timestamp, вычисляется дата и время, затем берется отличие времени сервера от GMT, после чего полученное время корректируется на эту величину.

И если так, то, копируя сайт и БД на другие сервера, я с помощью функции getdate буду получать везде разные результаты, а с помощью функции date - везде одинаковые ? Если не секрет, где об этом можно почитать ?
__________________
Funciona situando las manos bajo el secador

Старый 07.02.2004, 00:06
nagash вне форума Посмотреть профиль Отправить личное сообщение для nagash Посетить домашнюю страницу nagash Найти все сообщения от nagash
  № 6  
nagash
Ветеран форума
 
Аватар для nagash

Регистрация: Jul 2001
Адрес: Москва
Сообщений: 3,088
Отправить сообщение для nagash с помощью ICQ
www.php.net

Старый 10.02.2004, 11:07
telesar вне форума Посмотреть профиль Отправить личное сообщение для telesar Посетить домашнюю страницу telesar Найти все сообщения от telesar
  № 7  
telesar
 
Аватар для telesar

Регистрация: 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

Старый 05.04.2004, 12:59
telesar вне форума Посмотреть профиль Отправить личное сообщение для telesar Посетить домашнюю страницу telesar Найти все сообщения от telesar
  № 8  
telesar
 
Аватар для telesar

Регистрация: Feb 2002
Адрес: Саратов
Сообщений: 93
Ага, а с переходом на летнее время опять появилась неправильность в один час, т.е. мы перешли на летнее, а сервер нет. Интересно, GMT вообще не предусматривает переходы на зимнее и летнее время, или админы должны вручную его на сервере подправлять ?
__________________
Funciona situando las manos bajo el secador

Создать новую тему   Часовой пояс GMT +4, время: 08:48.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 08:48.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.