3

I am creating a custom report in Magento. My server is located in the US and my shop is Brazilian. It turns out that buying schedules are saved in the American schedule, ie 3hours more than in Brazil. And that gives a difference in the report results.

Imagine the following situation: A customer makes a purchase on 30/06 at 10:00 PM (time of Brazil), in the database, this purchase comes as day 01/07 at 01:00 AM.

How do you pick the order creation time (GMT USA) and turn clockwise from Brazil?

Today, I'm using that.

      $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();
    }

Anyone who can help, thank you

  • possible duplicate of [Magento group by clause on date field](http://stackoverflow.com/questions/29769626/magento-group-by-clause-on-date-field) – β.εηοιτ.βε Jul 09 '15 at 19:20

1 Answers1

1

You should always use Magento's core date function to account for timezones.

So instead of:

$from_date = date( 'Y-m-d' . ' 00:00:00', strtotime( $from ) );

Use:

$from_date = Mage::getModel( 'core/date' )->date( 'Y-m-d 00:00:00', strtotime( $from ) );

This will give you the date based on the timezone you have set in your store's configuration in the admin.

Junaid Bhura
  • 317
  • 2
  • 11