magento 2 is new from date
<?php
namespace PartyShowroom\Core\Model;
use Magento\Framework\Model\AbstractModel;
/** constructor dependent */
use Magento\Framework\Model\Context;
use Magento\Framework\Registry;
use Magento\Framework\Model\ResourceModel\AbstractResource;
use Magento\Framework\Data\Collection\AbstractDb;
/** injected Classes */
use Magento\Catalog\Model\Config;
use Magento\Catalog\Model\ResourceModel\Product\CollectionFactory;
use Magento\Framework\Stdlib\DateTime\TimezoneInterface;
use Magento\Catalog\Model\Product\Visibility;
class NewProduct extends AbstractModel
{
/**
* @var TimezoneInterface
*/
private $localeDate;
/**
* @var $productCollection \Magento\Catalog\Model\ResourceModel\Product\Collection
*/
private $productCollection;
/**
* @var Visibility
*/
private $catalogProductVisibility;
/**
* @var Config
*/
private $catalogConfig;
/**
* NewProduct constructor.
* @param CollectionFactory $productCollectionFactory
* @param TimezoneInterface $localeDate
* @param Visibility $catalogProductVisibility
* @param Config $catalogConfig
* @param Context $context
* @param Registry $registry
* @param AbstractResource|null $resource
* @param AbstractDb|null $resourceCollection
* @param array $data
*/
public function __construct(
CollectionFactory $productCollectionFactory,
TimezoneInterface $localeDate,
Visibility $catalogProductVisibility,
Config $catalogConfig,
Context $context,
Registry $registry,
AbstractResource $resource = null,
AbstractDb $resourceCollection = null,
array $data = []
)
{
parent::__construct($context, $registry, $resource, $resourceCollection, $data);
$this->localeDate = $localeDate;
$this->productCollection = $productCollectionFactory->create();
$this->catalogProductVisibility = $catalogProductVisibility;
$this->catalogConfig = $catalogConfig;
}
/**
* @param $pageSize
* @return \Magento\Catalog\Model\ResourceModel\Product\Collection
*/
public function getNewProductsCollection($pageSize)
{
$this->productCollection->setVisibility($this->catalogProductVisibility->getVisibleInCatalogIds());
$this->productCollection = $this->_addProductAttributesAndPrices(
$this->productCollection
)->addStoreFilter()->addAttributeToFilter(
'news_from_date',
[
'or' => [
0 => ['date' => true, 'to' => $this->_getTodayEndOfDayDate()],
1 => ['is' => new \Zend_Db_Expr('null')],
]
],
'left'
)->addAttributeToFilter(
'news_to_date',
[
'or' => [
0 => ['date' => true, 'from' => $this->_getTodayStartOfDayData()],
1 => ['is' => new \Zend_Db_Expr('null')],
]
],
'left'
)->addAttributeToFilter(
[
['attribute' => 'news_from_date', 'is' => new \Zend_Db_Expr('not null')],
['attribute' => 'news_to_date', 'is' => new \Zend_Db_Expr('not null')],
]
)->addAttributeToSort(
'news_from_date',
'desc'
)->setPageSize(
$pageSize
)->setCurPage(
1
);
return $this->productCollection;
}
protected function _getTodayStartOfDayData()
{
return $this->localeDate->date()->setTime(0, 0, 0)->format('Y-m-d H:i:s');
}
protected function _getTodayEndOfDayDate()
{
return $this->localeDate->date()->setTime(23, 59, 59)->format('Y-m-d H:i:s');
}
/**
* @param $collection
* @return mixed
*/
protected function _addProductAttributesAndPrices($collection) {
return $collection
->addMinimalPrice()
->addFinalPrice()
->addTaxPercents()
->addAttributeToSelect($this->catalogConfig->getProductAttributes())
->addUrlRewrite();
}
}