我正在Magento中创建一个自定义报告。我的服务器位于美国,我的商店在巴西。事实证明,美国人的购买时间表比巴西人多3个小时。这使得报告结果有所不同。
想象一下下面的情况:一个客户在30/06晚上10:00(巴西时间)进行了一次购买,在数据库中,这次购买是在01/07天的01:00 AM。
如何选择订单创建时间(格林尼治标准时间美国)并从巴西顺时针旋转?
今天,我正在使用它。
$to="";
$from="";
$show_order_statuses = 0;
$orserstatus = "";
$result_order = 0;
if(!empty($_REQUEST['from']) && !empty($_REQUEST['to'])){
$orders_row = array();
date_default_timezone_set('America/Sao_Paulo'); //define o timezone como Sãp Paulo
$filter_type = $_REQUEST['filter_type'];
$from = $_REQUEST['from'];
$to = $_REQUEST['to'];
$from_date = date('Y-m-d' . ' 00:00:00', strtotime($from));
$to_date = date('Y-m-d' . ' 23:59:59', strtotime($to));
$filter_model = ($filter_type == 'shipping_date')
? 'sales/order_shipment_collection'
: 'sales/order_collection';
if($_REQUEST['show_order_statuses']>0){
$orserstatus = $_REQUEST['order_statuses'];
$_orderCollections = Mage::getResourceModel($filter_model);
$_orderCollections->addAttributeToSelect('*');
$_orderCollections->addFieldToFilter('created_at', array('from'=>$from_date, 'to'=>$to_date));
if($filter_type == 'order_date'){
$_orderCollections->addFieldToFilter('status', $orserstatus);
}
$_orderCollections->setOrder('created_at', 'desc');
$_orderCollections->load();
}else{
$_orderCollections = Mage::getResourceModel($filter_model)
->addAttributeToSelect('*')
->addFieldToFilter('created_at', array('from'=>$from_date, 'to'=>$to_date))
->setOrder('created_at', 'desc')
->load();
}
任何可以帮助的人,谢谢你
您应该始终使用Magento的核心日期函数来说明时区。
所以不是:
$from_date = date( 'Y-m-d' . ' 00:00:00', strtotime( $from ) );
使用:
$from_date = Mage::getModel( 'core/date' )->date( 'Y-m-d 00:00:00', strtotime( $from ) );
这将根据您在管理中的商店配置中设置的时区为您提供日期。