【问题标题】:Magento - How to set timezone in date field of PHP?Magento - 如何在 PHP 的日期字段中设置时区?
【发布时间】:2015-08-28 11:01:26
【问题描述】:

我在Form.php 中有一个日期字段,如下所示:

$fieldset->addField('trigger_time', 'date', array(
            'label' => Mage::helper('order_test')->__('Trigger Time'),
            'name'  => 'trigger_time',
            'title' => Mage::helper('order_test')->__('Trigger Time'),
            'image' => $this->getSkinUrl('images/grid-cal.gif'),
            'format' => 'yyyy-MM-dd HH:mm:ss',
            'time' => true,
        ));

以我的语言环境时区GMT+2 为例。如果我在表单中输入2015-08-29 12:00:00,我想保存在数据库中的是2015-08-29 10:00:00,而目前我的Magento 的行为是保存我输入的内容。

即使我在表单中输入本地时间,也希望使用GMT 时间在数据库中保存 trigger_time。知道怎么做吗?

【问题讨论】:

    标签: php magento date timezone


    【解决方案1】:

    试试这个

    $fieldset->addField('trigger_time', 'date', array(
                'label' => Mage::helper('order_test')->__('Trigger Time'),
                'name'  => 'trigger_time',
                'title' => Mage::helper('order_test')->__('Trigger Time'),
                'image' => $this->getSkinUrl('images/grid-cal.gif'),
                'format' => Mage::app()->getLocale()->getDateTimeFormat(Mage_Core_Model_Locale::FORMAT_TYPE_FULL),
                'time' => true,
            ));
    

    【讨论】:

    • 我之前尝试过,但没有成功。它只是在时间格式上有所不同。更重要的是,我确实需要那种格式。 :(
    【解决方案2】:

    我终于想通了。

    $store_timezone = new DateTimeZone(Mage::getStoreConfig('general/locale/timezone'));
    $gmt_timezone = new DateTimeZone('Etc/GMT');
       if (isset($template[$key]) && trim($template[$key]) != '') {
          $dateTime = new DateTime($template['base_time'], $gmt_timezone);
          $dateTime->setTimezone($store_timezone);
          $template['base_time'] = $dateTime->format('Y-m-d H:i:s');
       }
    

    我将这些代码放在控制器的 saveAction 方法中。它会在保存到数据库之前检索语言环境时区并将输入转换为 GMT 时间。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-04-25
      • 2016-03-26
      • 2016-02-20
      • 2012-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多