Magento和BST时区问题

时间:2014-06-09 15:49:56

标签: php magento datetime timezone

我在LOSP堆栈顶部运行CentOS中的Magento商店,我正在尝试使用订单的created_at日期时间从网站将订单导入我们的CRM(因此我们可以执行增量更新)。

服务器的时区是欧洲/伦敦,我的php-fpm池配置(对于我的网站)也被认为是相同的:

php_admin_value[date.timezone] = Europe/London

我创建了一个订单,它正确显示订单的创建时间,例如:

enter image description here

但是,如果我在数据库中查看此订单,created_at设置为提前一小时(让我相信BST时区设置无效):

enter image description here

这是否意味着Magento不支持BST?或者我们的magento设置不正确?或者我是否需要一种解决方法(即检测是否启用了夏令时,然后添加/删除小时等...)


更新

这就是我实现give me all the orders since my last sync功能的方式,其中以下代码中的$API_Data是指服务器的上次同步:

private function GetNewOrderIncrementIds($API_Data = '')
{
    // Init
    $now = new DateTime();

    // Set Timezone to Europe/London (From Config)
    $now->setTimezone(new DateTimeZone(Mage::getStoreConfig('mymodule_config/system_config/default_timezone')));

    // Generate Date & Time
    $fromDate = $API_Data;
    $toDate   = $now->format('Y-m-d H:i:s');

    // Load Straight Order Sync Config
    $sos_enabled  = ((int)Mage::getStoreConfig('mymodule_config/order_sync/straight_order_sync_enabled'));
    $sos_storeid  = (int)Mage::getStoreConfig('mymodule_config/order_sync/straight_order_sync_storeid');
    $sos_shipping = Mage::getStoreConfig('mymodule_config/order_sync/straight_order_sync_shippingmethod');

    // Load Order Collection
    $order_collection = Mage::getModel('sales/order')
        ->getCollection()
        ->addAttributeToFilter('created_at', array(
            'from' => $fromDate,
            'to' => $toDate
        ));

    // Build Order Increment Id List
    $new_orders = array();
    foreach ($order_collection as $order)
    {
        // Check If This Order Is Straight Order Sync
        $doSOS = ($sos_enabled &&
                  (int)$order->getStoreId() == $sos_storeid &&
                  $order->getShippingMethod() == $sos_shipping);

        // Append Order
        $new_orders[] = array(
            'OrderNumber' => $order->getIncrementId(),
            'DoSOS'       => $doSOS
        );
    }
    $order_collection = null;

    // Finished
    $this->API_Response(false, '', json_encode(array(
        'LastSync'  => $toDate,
        'NewOrders' => $new_orders
    )));
}

1 个答案:

答案 0 :(得分:2)

Magento设置脚本相对于服务器时间的时间,转换为UTC。因此,每个Magento商店(数据库方式)都与UTC同步。阅读更多@ Guide through Magento’s timezones

要保存created_at日期,请使用

  

法师:: getSingleton( '芯/日期') - > GMTDATE()

要检索created_at存储日期,请使用

  

Mage :: helper('core') - > formatDate($ this-> getCreatedAtStoreDate(),$ format,true);

     

请参阅/app/code/core/Mage/Core/Block/Abstract.php

获取订单日期

foreach ($order_collection as $order)
    {
       ...
       $created_at = Mage::helper('core')->formatDate($order->getCreatedAt(), 'medium', true);