Как изменить часовой пояс (СЕЙЧАС) - PullRequest
3 голосов
/ 06 февраля 2012

Я использую NOW () в SQL-запрос.Я хочу изменить его на другой часовой пояс.это возможно?

Пробовал эту функцию

class common {

    public function getTime() {
        $date = new DateTime();
        $date->setTimezone(new DateTimeZone('Europe/Paris'));
        return $date->format('Y-m-d H:i:s');
    }

}

И получаю следующую ошибку

Catchable fatal error:  Object of class common could not be converted to string in line below

        $stmt = $this->db->prepare("INSERT INTO `items` 
      (`refno`, `color`, `size`, `qt`, `stackno`, `notes`, `price`, `add_date`)
      VALUES (?, ?, ?, ?, ?, ?, ?, $this->common->getTime())") or die($db->error);

Что я сделал не так?

Ответы [ 2 ]

3 голосов
/ 06 февраля 2012

Ошибка на самом деле является ошибкой PHP, а не ошибкой SQL. Попытка вычислить сложные выражения расширения переменной внутри интерполяции строк не работает так, как вы это делаете.

Попробуйте поместить объект внутрь {} фигурных скобок:

$stmt = $this->db->prepare("INSERT INTO `items` 
      (`refno`, `color`, `size`, `qt`, `stackno`, `notes`, `price`, `add_date`)
      VALUES (?, ?, ?, ?, ?, ?, ?, {$this->common->getTime()})") or die($db->error);

См. Подзаголовок Сложный (фигурный) синтаксис на странице руководства http://php.net/manual/en/language.types.string.php


Ваш комментарий:

теперь получает эту ошибку в той же строке: пытается получить свойство необъекта

Вы не показали, как вы настраиваете $this->common. Учитывая приведенный вами синтаксис, common должен быть экземпляром объекта вашего класса common. Я предполагаю, что вы пытаетесь вызвать функцию getTime () без создания экземпляра класса. Если вы хотите использовать статические методы класса, вам придется сделать это следующим образом:

class common {

    public static function getTime() {
        $date = new DateTime();
        $date->setTimezone(new DateTimeZone('Europe/Paris'));
        return $date->format('Y-m-d H:i:s');
    }

}

$stmt = $this->db->prepare("INSERT INTO `items` 
      (`refno`, `color`, `size`, `qt`, `stackno`, `notes`, `price`, `add_date`)
      VALUES (?, ?, ?, ?, ?, ?, ?, " . common::getTime() . ")") or die($db->error);

Если вы не знакомы с разницей между классами и объектами, а также с использованием static, то вам нужно немного почитать, например, Объектно-ориентированный PHP .

0 голосов
/ 06 февраля 2012

Вы будете использовать этот вызов sql.

SET time_zone = timezone;

Согласно документации mysql.

http://dev.mysql.com/doc/refman/5.5/en/time-zone-support.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...