我在LOSP堆栈顶部运行CentOS中的Magento商店,我正在尝试使用订单的created_at
日期时间从网站将订单导入我们的CRM(因此我们可以执行增量更新)。
服务器的时区是欧洲/伦敦,我的php-fpm池配置(对于我的网站)也被认为是相同的:
php_admin_value[date.timezone] = Europe/London
我创建了一个订单,它正确显示订单的创建时间,例如:
但是,如果我在数据库中查看此订单,created_at
设置为提前一小时(让我相信BST时区设置无效):
这是否意味着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
)));
}
答案 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);