Magento 集合:按创建的过滤?按本地时区?(或创建日期)

Magento 集合:按创建的过滤?按本地时区?(或创建日期),magento,Magento,我必须按日期筛选收款(发票),以获得一个月的所有发票 例如:一张发票(在数据库中)的创建日期为: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' => $dateFr

我必须按日期筛选收款(发票),以获得一个月的所有发票

例如:一张发票(在数据库中)的创建日期为:
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->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();
发票是“四月”号

因此,我必须通过
CreatedAtStoreDate
过滤我的收藏,但这不是一个数据库字段

我的问题:

我如何通过
CreatedAtStoreDate
过滤订单或发票收款,以便日期为
2014-04-30 22:27:30
的发票或订单将不在我的4月份收款中,而是在5月份收款


谢谢您的帮助。

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

/**
*获取允许设置本地时区和服务器时区之间的偏移量的参数。服务器时区为GMT。
*示例:将本地时间设置为gmt+2时,在URL中添加?gmt=2;gmt-5时,添加-5,以此类推。
*/
$gmt_offset=(int)Mage::app()->getRequest()->getParam('gmt');
$dateFrom='2014-04-01 00:00:00';
$dateTo='2014-04-30 23:59:59';
如果($gmt\u offset>-13&&$gmt\u offset<15&&$gmt\u offset!=0){
$locale=Mage::app()->getLocale()->getLocaleCode();
$date_from=新的Zend_日期(strotime($dateFrom),Zend_日期::时间戳,$locale);
$date_to=新的Zend_日期(strotime($dateTo),Zend_日期::时间戳,$locale);
如果($gmt_offset>0){
$date\u from->add($gmt\u offset,Zend\u date::HOUR);
$date\u to->add($gmt\u offset,Zend\u date::HOUR);
}否则{
$date\u from->sub($gmt\u offset,Zend\u date::HOUR);
$date\u to->sub($gmt\u offset,Zend\u 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,
'至'=>$dateTo,
));

找到问题的答案是否幸运?
 $invoiceCollection = Mage::getModel('sales/order_invoice')->getCollection();
/** 
 * 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,
));