集合:按本地时区按created_at过滤? (或CreatedAtStoreDate)

时间:2014-06-30 12:10:21

标签: magento

我必须按日期过滤收款(发票)以获取一个月的所有发票。

例如:一张发票的create_at日期(在数据库中)为:2014-04-30 22:27:30

如果我过滤了该集合:

    $dateFrom = '2014-04-01 00:00:00';
    $dateTo = '2014-04-30 23:59:59';
    $invoiceCollection->addAttributeToFilter('created_at', array(
        'from' => $dateFrom,
        'to' => $dateTo,
    ));

此日期的发票将在集合中。

有两种日期:

$invoice->getCreatedAt()

并且:

$invoice->getCreatedAtStoreDate()

在这种情况下:

$invoice->getCreatedAt() = 2014-04-30 22:27:30 (UTC/GMT time)
$invoice->getCreatedAtStoreDate() = 2014-05-01 00:27:40 (local timezone)

在销售 - >发票"我的"发票将在5月份收取。如果我使用

 $invoiceCollection = Mage::getModel('sales/order_invoice')->getCollection();

发票在" April"。

所以我必须按CreatedAtStoreDate过滤我的收藏 - 但这不是数据库字段。

我的问题:

如何按CreatedAtStoreDate过滤订单或发票集合,以便日期2014-04-30 22:27:30的发票或订单不在我的四月集合中,而是在五月份?

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您可以使用一些GET参数来定义局部偏移,然后将此偏移量添加到过滤器中的日期。它会是这样的(我没有测试过):

/** 
 * GET param which allow to set offset between local and server timezone. Server timezone is GMT.
 * Examples: add ?gmt=2 in URL for set local time to GMT+2, ?gmt=-5 for GMT-5, etc.
 */
$gmt_offset = (int)Mage::app()->getRequest()->getParam('gmt');  
$dateFrom = '2014-04-01 00:00:00';
$dateTo = '2014-04-30 23:59:59';

if($gmt_offset > -13 && $gmt_offset < 15 && $gmt_offset != 0){
    $locale = Mage::app()->getLocale()->getLocaleCode();
    $date_from = new Zend_Date(strtotime($dateFrom), Zend_Date::TIMESTAMP, $locale);
    $date_to = new Zend_Date(strtotime($dateTo), Zend_Date::TIMESTAMP, $locale);   

    if($gmt_offset > 0){
        $date_from->add($gmt_offset, Zend_Date::HOUR);
        $date_to->add($gmt_offset, Zend_Date::HOUR);
    }else{
        $date_from->sub($gmt_offset, Zend_Date::HOUR);
        $date_to->sub($gmt_offset, Zend_Date::HOUR);
    }

    $dateFrom = $date_from->get('YYYY-MM-dd HH:mm:ss');
    $dateTo = $date_to->get('YYYY-MM-dd HH:mm:ss');   
}

$invoiceCollection->addAttributeToFilter('created_at', array(
    'from' => $dateFrom,
    'to' => $dateTo,
));