diff --git a/vendor/magento/module-sales/Plugin/Model/ResourceModel/Order/OrderGridCollectionFilter.php b/vendor/magento/module-sales/Plugin/Model/ResourceModel/Order/OrderGridCollectionFilter.php index 995bb8335163..743bc8358829 100644 --- a/vendor/magento/module-sales/Plugin/Model/ResourceModel/Order/OrderGridCollectionFilter.php +++ b/vendor/magento/module-sales/Plugin/Model/ResourceModel/Order/OrderGridCollectionFilter.php @@ -6,6 +6,8 @@ namespace Magento\Sales\Plugin\Model\ResourceModel\Order; +use DateTime; +use DateTimeInterface; use Magento\Framework\DB\Select; use Magento\Framework\Stdlib\DateTime\TimezoneInterface; use Magento\Framework\View\Element\UiComponent\DataProvider\SearchResult; @@ -44,11 +46,12 @@ public function aroundAddFieldToFilter( $field, $condition = null ) { - if ($field === 'created_at' || $field === 'order_created_at') { if (is_array($condition)) { foreach ($condition as $key => $value) { - $condition[$key] = $this->timeZone->convertConfigTimeToUtc($value); + if ($value = $this->isValidDate($value)) { + $condition[$key] = $value->setTimezone(new \DateTimeZone('UTC'))->format('Y-m-d H:i:s'); + } } } @@ -61,4 +64,21 @@ public function aroundAddFieldToFilter( return $proceed($field, $condition); } + + /** + * Validate date string + * + * @param mixed $datetime + * @return mixed + */ + private function isValidDate(mixed $datetime): mixed + { + try { + return $datetime instanceof DateTimeInterface + ? $datetime : (is_string($datetime) + ? new DateTime($datetime, new \DateTimeZone($this->timeZone->getConfigTimezone())) : false); + } catch (\Exception $e) { + return false; + } + } }