Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: DATE_FORMAT, NOW() прибавить 1 час
 
 автор: Port_Artur   (20.01.2010 в 10:01)   письмо автору
 
 

Время на сервере отстаёт на час в связи с чем работа скрипта не правильная на 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')


Но работа скрипта от этого не стала правильной он вообще стал выдавать несуразные результаты по одним строкам выдаёт вроде правильно по другим как буд-то вообще ничего не менялось.

Правильно ли я прибавляю этот злополучный час?

  Ответить  
 
 автор: Trianon   (20.01.2010 в 10:26)   письмо автору
 
   для: Port_Artur   (20.01.2010 в 10:01)
 

абсолютное время на сервере обычно конфигурируется корректно.
Может Вы просто локаль не задали?

  Ответить  
 
 автор: Port_Artur   (20.01.2010 в 10:38)   письмо автору
 
   для: Trianon   (20.01.2010 в 10:26)
 

Это как, задать локаль?

DateTime даёт на 1 час меньше я проверял

  Ответить  
 
 автор: sl1p   (20.01.2010 в 11:00)   письмо автору
 
   для: Port_Artur   (20.01.2010 в 10:38)
 

http://www.softtime.ru/forum/read.php?id_forum=5&id_theme=71048&page=1

  Ответить  
 
 автор: Port_Artur   (21.01.2010 в 00:35)   письмо автору
 
   для: 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 предыдущего дня

  Ответить  
 
 автор: Trianon   (21.01.2010 в 02:42)   письмо автору
 
   для: Port_Artur   (21.01.2010 в 00:35)
 

Похоже, теперь локаль php задана, а локаль SQL - нет.

Вообще же, если Вы хотите работать с сервером в чужой таймзоне, возможно, что более надежным подходом будет за пределы контекста timestamp не вылезать. А метки хранить значениями таймштампов в целых полях.

  Ответить  
 
 автор: Port_Artur   (21.01.2010 в 07:13)   письмо автору
 
   для: Trianon   (21.01.2010 в 02:42)
 

А как установить локаль SQL или это невозможно.
Сервера стоят на Украине ну а как понятно я в России.
Надо как то выкрутится.

Как?

  Ответить  
 
 автор: Trianon   (21.01.2010 в 08:50)   письмо автору
 
   для: 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();

  Ответить  
 
 автор: Port_Artur   (21.01.2010 в 22:40)   письмо автору
 
   для: Trianon   (21.01.2010 в 08:50)
 

А где приведённые примеры нужно написать - извините я в английском не силён.

  Ответить  
 
 автор: Trianon   (21.01.2010 в 23:11)   письмо автору
 
   для: Port_Artur   (21.01.2010 в 22:40)
 

А это не английский. Это SQL.
Каждая строка - это отдельный запрос к СУБД MySQL.
Где нравится - там и выполняете.
Смысл имеет - там, где Вы выполняете остальные запросы. SELECT, INSERT, UPDATE, DELETE...

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования