From b0398be6963293cb198df0a65739999ed2bb3329 Mon Sep 17 00:00:00 2001 From: mattgoud Date: Tue, 2 Jun 2026 14:32:12 +0200 Subject: [PATCH] Fix SQL queries using NOW() with MySQL timezone instead of shop timezone Replace NOW() in raw SQL queries with PHP's date() so that the shop's configured timezone is always used instead of the MySQL server timezone (UTC). Fixes PrestaShop/PrestaShop#30828 Co-Authored-By: Claude Sonnet 4.6 --- classes/Hook/HookDisplayBackOfficeHeader.php | 2 +- classes/Repository/GanalyticsRepository.php | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/classes/Hook/HookDisplayBackOfficeHeader.php b/classes/Hook/HookDisplayBackOfficeHeader.php index 6aeefe5..6250c2a 100644 --- a/classes/Hook/HookDisplayBackOfficeHeader.php +++ b/classes/Hook/HookDisplayBackOfficeHeader.php @@ -89,7 +89,7 @@ protected function processFailedOrders() $failedOrders = Db::getInstance()->ExecuteS( 'SELECT DISTINCT o.id_order, g.sent FROM `' . _DB_PREFIX_ . 'orders` o LEFT JOIN `' . _DB_PREFIX_ . GanalyticsRepository::TABLE_NAME . '` g ON o.id_order = g.id_order - WHERE (g.sent IS NULL OR g.sent = 0) AND o.date_add BETWEEN NOW() - INTERVAL ' . $backloadDays . ' DAY AND NOW() - INTERVAL 30 MINUTE' + WHERE (g.sent IS NULL OR g.sent = 0) AND o.date_add BETWEEN \'' . date('Y-m-d H:i:s', strtotime('-' . $backloadDays . ' days')) . '\' AND \'' . date('Y-m-d H:i:s', strtotime('-30 minutes')) . '\'' ); // Process each failed order diff --git a/classes/Repository/GanalyticsRepository.php b/classes/Repository/GanalyticsRepository.php index c45e287..c74b421 100644 --- a/classes/Repository/GanalyticsRepository.php +++ b/classes/Repository/GanalyticsRepository.php @@ -70,7 +70,7 @@ public function findAllByShopIdAndDateAdd($shopId) FROM `' . _DB_PREFIX_ . self::TABLE_NAME . '` WHERE sent = 0 AND id_shop = ' . (int) $shopId . ' - AND DATE_ADD(date_add, INTERVAL 30 minute) < NOW()' + AND DATE_ADD(date_add, INTERVAL 30 minute) < \'' . date('Y-m-d H:i:s') . '\'' ); } @@ -108,7 +108,7 @@ public function addOrder(int $idOrder, int $idShop) 'id_order' => (int) $idOrder, 'id_shop' => (int) $idShop, 'sent' => 0, - 'date_add' => ['value' => 'NOW()', 'type' => 'sql'], + 'date_add' => date('Y-m-d H:i:s'), ] ); } @@ -144,7 +144,7 @@ public function markOrderAsSent($idOrder) return Db::getInstance()->update( self::TABLE_NAME, [ - 'date_add' => ['value' => 'NOW()', 'type' => 'sql'], + 'date_add' => date('Y-m-d H:i:s'), 'sent' => 1, ], 'id_order = ' . (int) $idOrder