2012-02-06 5 views
3

Я использую 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); 

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

+0

Функции даты в MySQL не используются напрямую, но вы можете указать серверу, какой часовой пояс использовать: http://dev.mysql.com/doc/refman/5.5/ru/time-zone-support.html –

ответ

3

ошибка на самом деле ошибка 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


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

теперь получение этой ошибки на том же lin e: Попытка получить свойство не-объекта

Вы не показали, как вы устанавливаете $this->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, то вам нужно сделайте некоторое чтение, например Object-Oriented PHP.

+0

теперь получение этой ошибки в одной строке: попытка получить свойство не-объекта – heron

+0

@epic, 'common', вероятно, не создается. Может быть, вы означали, что 'getTime()' статично, поэтому вы можете называть его как 'common :: getTime()'? –

+1

@Bill, поздравляет с 100K. –