Форум русской поддержки Joomla!® CMS
08.12.2016, 09:58:50 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 3.0 FAQ Joomla 2.5 FAQ Joomla 1.5 FAQ Правила форума Новости Joomla Реклама Войти Регистрация Помощь  
Страниц: [1]   Вниз
  Добавить закладку  |  Печать  
Автор

Как правильно записать дату создания записи в БД?

 (Прочитано 342 раз)
0 Пользователей и 1 Гость смотрят эту тему.
ImPuLsE
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 28


« : 01.04.2016, 12:47:47 »

Здравствуйте, Уважаемые!
Подскажите пожалуйста, каким образом вставляется дата в Joomla в MySQL? Делаю так:
Код:
private function _insertToDb(){

        // Get a db connection.
        $db = JFactory::getDbo();
         
        // Create a new query object.
        $query = $db->getQuery(true);
         
        // Insert columns.
        $columns = array('name', 'phone', 'created_at');
         
        // Insert values.
        $name = $_POST['recall_name'];
        $phone = $_POST['recall_phone'];
        $values = array($db->quote($name), $phone, $query->currentTimestamp());
         
        // Prepare the insert query.
        $query
            ->insert($db->quoteName('jos_recalls'))
            ->columns($db->quoteName($columns))
            ->values(implode(',', $values));
         
        // Set the query using our newly populated query object and execute it.
        $db->setQuery($query);
        $db->execute();
    }

вот этот момент с $query->currentTimestamp() - тип колонки в MySQL timestamp
Все работает ок, но вот время почему то вставляется на час больше. Уже все настройки сервера перепроверил, все ок, да и также при вставки данных через Хроноформы вставляет правильную дату, а через мою функцию не хочет (на час больше время). В чем может быть дело или как сделать иначе?
Записан
robert
Профи
********

Репутация: +344/-11
Offline Offline

Пол: Мужской
Сообщений: 3591


« Ответ #1 : 01.04.2016, 12:51:25 »

Проверьте настройки сервера.
Записан
b2z
Support Team
*****

Репутация: +710/-0
Offline Offline

Пол: Мужской
Сообщений: 7537


Разраблю понемногу


« Ответ #2 : 01.04.2016, 12:52:06 »

Наверное пишется с учётом временной зоны, а надо писать UTC. У Вас там колонка вида YYYY-MM-DD HH:MM:SS?
Попробуйте $query->currentTimestamp() заменить на JFactory::getDate()->toSql()
Записан
zomby6888
Живу я здесь
******

Репутация: +168/-3
Offline Offline

Пол: Мужской
Сообщений: 1538


« Ответ #3 : 01.04.2016, 13:29:29 »

Цитировать
Попробуйте $query->currentTimestamp() заменить на JFactory::getDate()->toSql()

Помоему там еще нужно указать параметр чтобы настройки временной зоны учитывались:
Код
JFactory::getDate()->toSql(true)
 
Записан
b2z
Support Team
*****

Репутация: +710/-0
Offline Offline

Пол: Мужской
Сообщений: 7537


Разраблю понемногу


« Ответ #4 : 01.04.2016, 13:54:09 »

Помоему там еще нужно указать параметр чтобы настройки временной зоны учитывались:
Код
JFactory::getDate()->toSql(true)
 
А зачем их учитывать? В базу должно писаться UTC, а уже после выборке из базы учитывать временную зону.
Записан
zomby6888
Живу я здесь
******

Репутация: +168/-3
Offline Offline

Пол: Мужской
Сообщений: 1538


« Ответ #5 : 01.04.2016, 14:44:43 »

Цитировать
А зачем их учитывать? В базу должно писаться UTC, а уже после выборке из базы учитывать временную зону

Да наверное, я как то даже не задумывался над этим. Помню просто что так делал когда то, больше не буду) Данные будут неточными если базу потом в другой стране развернуть. Но удобно тем что каждый раз при выборке не нужно учитывать зону.

Кстатии, мне было всегда интересно, в чем преимущество способа хранения даты в формате datetime от хранения timestamp? Или наоборот недостатки.
« Последнее редактирование: 01.04.2016, 14:57:53 от zomby6888 » Записан
b2z
Support Team
*****

Репутация: +710/-0
Offline Offline

Пол: Мужской
Сообщений: 7537


Разраблю понемногу


« Ответ #6 : 01.04.2016, 15:14:08 »

Кстатии, мне было всегда интересно, в чем преимущество способа хранения даты в формате datetime от хранения timestamp? Или наоборот недостатки.
https://habrahabr.ru/post/61391/
Записан
ImPuLsE
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 28


« Ответ #7 : 01.04.2016, 15:43:22 »

Наверное пишется с учётом временной зоны, а надо писать UTC. У Вас там колонка вида YYYY-MM-DD HH:MM:SS?
Попробуйте $query->currentTimestamp() заменить на JFactory::getDate()->toSql()
вот так вот выглядит - 2016-04-01 10:13:13
и еще я заметил закономерность что многие конструкции типа вашей JFactory::getDate()->toSql() не работают, а именно не создается даже запись.
Записан
b2z
Support Team
*****

Репутация: +710/-0
Offline Offline

Пол: Мужской
Сообщений: 7537


Разраблю понемногу


« Ответ #8 : 01.04.2016, 15:54:42 »

Ну не знаю, JFactory::getDate()->toSql() использую без проблем. А, у вас же Joomla 2.5! Может поэтому и не работает. Там было по другому JFactory::getDate()->toMySQL();
Записан
ImPuLsE
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 28


« Ответ #9 : 01.04.2016, 16:14:54 »

Ну не знаю, JFactory::getDate()->toSql() использую без проблем. А, у вас же Joomla 2.5! Может поэтому и не работает. Там было по другому JFactory::getDate()->toMySQL();
Всё равно не добавляет, может при implode  массив $values как то разбивает некорректно?
Записан
b2z
Support Team
*****

Репутация: +710/-0
Offline Offline

Пол: Мужской
Сообщений: 7537


Разраблю понемногу


« Ответ #10 : 01.04.2016, 16:34:15 »

Попробуйте сделать $db->quote(JFactory::getDate()->toMySQL())
Записан
zomby6888
Живу я здесь
******

Репутация: +168/-3
Offline Offline

Пол: Мужской
Сообщений: 1538


« Ответ #11 : 01.04.2016, 18:14:29 »

Цитировать
https://habrahabr.ru/post/61391/

А я еще вот эту статью прочитал: https://habrahabr.ru/post/69983/. Получается для хранения времени создания и обновления лучше использовать timestamp. Почему же тогда разрабочики Joomla используют datetime?
Записан
ImPuLsE
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 28


« Ответ #12 : 01.04.2016, 18:16:41 »

Попробуйте сделать $db->quote(JFactory::getDate()->toMySQL())
да кавычки порешали)) спасибо но вот проблема осталась)) только время теперь не на час больше а на 3 меньше стало)))))))))

время на сервере - Птн Апр  1 17:18:09 MSK 2016
тут кстати тоже на форуме время сообщений на час больше показывает)

а вот и рабочий вариант - $db->quote(date("Y-m-d H:i:s", time()))
« Последнее редактирование: 01.04.2016, 18:46:51 от ImPuLsE » Записан
Страниц: [1]   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Powered by SMF 1.1.21 | SMF © 2006, Simple Machines

Joomlaforum.ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters
the trademark holder in the United States and other countries.

LiveInternet