Magento Filter-Sammlung nach Erstellungszeiten (heute, gestern, Woche, Stunde usw.)


9

Ich habe eine benutzerdefinierte Sammlung, die ich nach Erstellungsdatum filtern möchte, und nach Einträgen, die "gestern" erstellt wurden.

Sammlungseinträge

//dates are set in controller using
setCreatedTime(Mage::getModel('core/date')->gmtDate()); 

Gestern erstellt (funktioniert nicht)

//3 products items Yesterday
//below filtering outputs incorrect entries
$collection = Mage::getModel('things/things')->getCollection();

Ich habe es versucht, gebe aber falsche Einträge aus;

//thought strtotime('yesterday') would work..
$collection->addFieldToFilter('created_time', array('gt' => Mage::getModel('core/date')->date('Y-m-d H:i:s', strtotime('yesterday'))));
$collection->addFieldToFilter('created_time', array('gt' => Mage::getModel('core/date')->date('Y-m-d H:i:s', strtotime('-1 day'))));
$collection->addFieldToFilter('created_time', array('from'=> strtotime('-1 day', time()),'to'=> time(),'datetime' => true));
$fromDate = date('Y-m-d H:i:s', strtotime($fromDate));
$toDate = date('Y-m-d H:i:s', strtotime($toDate));
$collection->addFieldToFilter('created_time', array('from'=>$fromDate, 'to'=>$toDate));

Erstellt heute (aktueller Tag) (funktioniert)

//5 products items today with timestamp 2016-05-01 05:22:53
//below filtering outputs correct entries
$collection = Mage::getModel('things/things')->getCollection();
$collection->addFieldToFilter('created_time', array('gt' => Mage::getModel('core/date')->date('Y-m-d H:i:s', strtotime('today'))));

Erstellt letzte Woche (Werke)

//23 products items with timestamps for this week
//below filtering outputs correct entries
$collection = Mage::getModel('things/things')->getCollection();
$collection->addFieldToFilter('created_time', array('gt' => Mage::getModel('core/date')->date('Y-m-d H:i:s', strtotime('-1 week'))));

Antworten:


10

Zu @Ashvin Antwort hinzufügen ..

Ich habe Einträge innerhalb der letzten Stunde erstellt

$things = Mage::getModel('things/things')->getCollection();
$things->addFieldToFilter('things_type', 'view');
$fromDate = date('Y-m-d H:i:s', strtotime('-1 hour'));
$toDate = date('Y-m-d H:i:s', strtotime(now()));
$things->addFieldToFilter('created_time', array(
    'from' => $fromDate,
    'to' => $toDate,
    'date' => true,
    ));
return count($things);

und wie ich gestern Einträge erstellt habe;

$now = Mage::getModel('core/date')->timestamp(time());
$dateStart = date('Y-m-d' . ' 00:00:00', $now);
$dateEnd = date('Y-m-d' . ' 23:59:59', $now);
$things = Mage::getModel('things/things')->getCollection();
$things->addFieldToFilter('things_type', 'view');
$things->addFieldToFilter('created_time', array('from' => $dateStart, 'to' => $dateEnd));
return count($things);

5

Wie lösen wir das? einfach. Begrenzung der Anzahl der Bestellungen, die in den letzten 24 Stunden im Auftragsraster angezeigt wurden, sofern nicht anders angefordert.

Beispiel: - Kopieren Sie die Datei app / code / core / Mage / Adminhtml / Block / Sales / Order / Grid.php nach:

app / code / local / Mage / Adminhtml / Block / Sales / Order / Grid.php

Bearbeiten Sie die folgende Funktion, kopieren Sie sie von hier aus:

protected function _prepareCollection()    {

$collection = Mage::getResourceModel($this->_getCollectionClass());

######################## FILTER BY LAST DAY ######################
$now = Mage::getModel('core/date')->timestamp(time());
$filter   = $this->getParam($this->getVarNameFilter(), null); //important - check for other requested grid-filters before filtering today's orders

$dateStart = date('Y-m-d' . ' 00:00:00', $now);
$dateEnd = date('Y-m-d' . ' 23:59:59', $now);
$postData = Mage::app()->getRequest()->getPost();
if (empty($filter)) {
$collection->addFieldToFilter('`main_table`.created_at', array('from' => $dateStart, 'to' => $dateEnd));
}
##################################################################



$collection->getSelect()->group('entity_id');
$this->setCollection($collection);

return $this;

}

Verwenden Sie, um mehr Code für Ihre Frage zu stellen ... (heute, gestern, Woche, Stunde usw.)


go0d works @ashvin
Amit Bera

Hallo! Tolle Lösung! Wie kann ich es ändern, damit nur die Bestellungen von vor zwei Stunden entgegengenommen werden?
Vladimir Despotovic
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.