|
|
|
| Время на сервере отстаёт на час в связи с чем работа скрипта не правильная на 1 час.
Создаётся запрос в базу данных:
$tmp1 = "data < DATE_FORMAT(NOW(),'%Y-%m-%d 23:59:59') - INTERVAL '$end' DAY";
if($begin == 0) $tmp2 = "";
else $tmp2 = " AND data >= DATE_FORMAT(NOW(),'%Y-%m-%d 23:59:59') - INTERVAL '".$begin."' DAY";
$end = $tmp1.$tmp2;
|
Но NOW() даёт время на 1 час меньше. Была предприянта попытка добавить 1 час через INTERVAL:
DATE_FORMAT(NOW() + INTERVAL '1' Hour,'%Y-%m-%d 23:59:59')
|
Но работа скрипта от этого не стала правильной он вообще стал выдавать несуразные результаты по одним строкам выдаёт вроде правильно по другим как буд-то вообще ничего не менялось.
Правильно ли я прибавляю этот злополучный час? | |
|
|
|
|
|
|
|
для: Port_Artur
(20.01.2010 в 10:01)
| | абсолютное время на сервере обычно конфигурируется корректно.
Может Вы просто локаль не задали? | |
|
|
|
|
|
|
|
для: Trianon
(20.01.2010 в 10:26)
| | Это как, задать локаль?
DateTime даёт на 1 час меньше я проверял | |
|
|
|
|
|
|
|
|
для: sl1p
(20.01.2010 в 11:00)
| | Установил:
date_default_timezone_set('Europe/Moscow');
|
Но при использовании
date_default_timezone_set('Europe/Moscow');
$tmp1 = "data < DATE_FORMAT(NOW(),'%Y-%m-%d 23:59:59') - INTERVAL '$end' DAY";
if($begin == 0) $tmp2 = "";
else $tmp2 = " AND data >= DATE_FORMAT(NOW(),'%Y-%m-%d 23:59:59') - INTERVAL '".$begin."' DAY";
$end = $tmp1.$tmp2;
|
по прежнему выбирает данные на час раньше, то есть если сейчас 1 минута первого, то данные берёт по 23:59:59 предыдущего дня | |
|
|
|
|
|
|
|
для: Port_Artur
(21.01.2010 в 00:35)
| | Похоже, теперь локаль php задана, а локаль SQL - нет.
Вообще же, если Вы хотите работать с сервером в чужой таймзоне, возможно, что более надежным подходом будет за пределы контекста timestamp не вылезать. А метки хранить значениями таймштампов в целых полях. | |
|
|
|
|
|
|
|
для: Trianon
(21.01.2010 в 02:42)
| | А как установить локаль SQL или это невозможно.
Сервера стоят на Украине ну а как понятно я в России.
Надо как то выкрутится.
Как? | |
|
|
|
|
|
|
|
для: Port_Artur
(21.01.2010 в 07:13)
| | http://dev.mysql.com/doc/refman/5.0/en/time-zone-support.html
SHOW VARIABLES LIKE 'time_zone';
SELECT NOW();
SET time_zone = '+03:00';
SHOW VARIABLES LIKE 'time_zone';
SELECT NOW();
|
| |
|
|
|
|
|
|
|
для: Trianon
(21.01.2010 в 08:50)
| | А где приведённые примеры нужно написать - извините я в английском не силён. | |
|
|
|
|
|
|
|
для: Port_Artur
(21.01.2010 в 22:40)
| | А это не английский. Это SQL.
Каждая строка - это отдельный запрос к СУБД MySQL.
Где нравится - там и выполняете.
Смысл имеет - там, где Вы выполняете остальные запросы. SELECT, INSERT, UPDATE, DELETE... | |
|
|
|