0 Пользователей и 1 Гость просматривают эту тему.
  • 12 Ответов
  • 729 Просмотров
*

ImPuLsE

  • Осваиваюсь на форуме
  • 28
  • 0
Здравствуйте, Уважаемые!
Подскажите пожалуйста, каким образом вставляется дата в 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

  • Профи
  • 4075
  • 376
Проверьте настройки сервера.
  • Не будь паразитом, сделай что-нибудь самостоятельно!
  • В личке и по Skype не даю советов.
*

b2z

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

zomby6888

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

Помоему там еще нужно указать параметр чтобы настройки временной зоны учитывались:
Код: php
JFactory::getDate()->toSql(true)
интернет-блог: http://websiteprog.ru
*

b2z

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

zomby6888

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

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

Кстатии, мне было всегда интересно, в чем преимущество способа хранения даты в формате datetime от хранения timestamp? Или наоборот недостатки.
« Последнее редактирование: 01.04.2016, 13:57:53 от zomby6888 »
интернет-блог: http://websiteprog.ru
*

b2z

  • Support Team
  • 7466
  • 742
  • Разраблю понемногу
Кстатии, мне было всегда интересно, в чем преимущество способа хранения даты в формате datetime от хранения timestamp? Или наоборот недостатки.
https://habrahabr.ru/post/61391/
*

ImPuLsE

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

b2z

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

ImPuLsE

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

zomby6888

  • Живу я здесь
  • 1484
  • 167
Цитировать
https://habrahabr.ru/post/61391/

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

ImPuLsE

  • Осваиваюсь на форуме
  • 28
  • 0
Попробуйте сделать $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, 17:46:51 от ImPuLsE »
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Проблема с сохранением записи в БД (не все поля сохраняются)

Автор GuDeVic

Ответов: 42
Просмотров: 824
Последний ответ 07.12.2016, 14:19:59
от b2z
Как правильно и безопасно вызывать файл из CMS не связанный с ней?

Автор voland

Ответов: 56
Просмотров: 625
Последний ответ 03.11.2016, 18:04:31
от Aleks.Denezh
Как достать правильно путь картинки для статьи из БД?

Автор SimonovSergey

Ответов: 2
Просмотров: 277
Последний ответ 25.01.2016, 14:11:57
от SimonovSergey
Коды, плагин, не знаю как правильно назвать

Автор KsandrL

Ответов: 3
Просмотров: 279
Последний ответ 15.12.2015, 15:19:41
от b2z
Схема создания пароля в Joomla 3

Автор shurakana

Ответов: 21
Просмотров: 1164
Последний ответ 11.08.2015, 01:24:00
от zomby6888