[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: date() выводит некорректное время.
grisha2013
Доброго времени суток.
Столкнулся с такой проблемой. Если вывести текущее время так:
echo "Текущее время: ".date("Y-m-d H:i:s");

то на локальном компе отображается время на час больше, а на сервере хостинга и того больше. При этом настройка
mysql_query("SET LOCAL time_zone='+03:00'");

в файле подключения к БД не влияет
Можно-ли как-то задать привязку по часовому поясу при отображении времени?

Ну это для проверки я вывел просто текущее время, а на самом деле, все немного сложнее.
У меня в таблице периодически пересчитывается рейтинг и через 12 часов обновляется. Соответственно, в базе хранится метка времени которое было на момент обновления данных, в поле типа int как число timestamp, по которой определяется необходимость в обновлении данных.

При обновлении данных в других полях, обновляю также поле time_change типа int занося в него значение из time(), затем сверяю время в этом поле с текущим временем
if($data['time_change'] < (time() - 60*60*12))
//если данные устарели - обновляю


Если я создам такое поле (другого типа)
ALTER TABLE `data` ADD `time_change2` TIMESTAMP NOT NULL DEFAULT 0 AFTER `time_change` ;

как в него сохранить время?
из базы чтобы этот таймстамп взять, понадобится сделать запрос вида
UNIX_TIMESTAMP(`time_change2`) as `tstamp`

верно?

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

UPDATE .... SET `date` = NOW()  WHERE `date` > `date` - INTERVAL 12 HOUR


Про часовой пояс вообще ничего не понял. К клиенту что ли нужно привязать было?

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
grisha2013
Цитата (twin @ 15.08.2013 - 03:32)
UPDATE .... SET `date` = NOW()  WHERE `date` > `date` - INTERVAL 12 HOUR

Наверное опечатка. Скорее всего, в таком случае, будет не:
WHERE `date` > `date` - INTERVAL 12 HOUR

а
WHERE `date` > NOW() - INTERVAL 12 HOUR

:blink:
twin
grisha2013
Тогда будет считаться не от прошлой метки, а 12 часов назад.

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

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
grisha2013
Именно так мне и нужно. Если при поступлении данных на сайт (а они поступают каждые 30 секунд), инфа в определенном поле базы устарела более чем на 12 часов, то ее тоже нужно обновить.
От посетителей там ничего не зависит, они просто видят то, что показывает движок.
Цитата (twin @ 15.08.2013 - 17:52)
Почему вы все так боитесь крона, он для того и придуман.

Если бы я знал как им пользоваться. Вам проще, Вы специалист, несмотря на прикол под аватаркой )), а я начинающий прогер.
killer8080
grisha2013
1 для того чтоб время (в php) отображалась в твоем часовом поясе
date_default_timezone_set('Europe/Kiev');

2 для хранения метки времени используй TIMESTAMP, а не INT
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.