Вы сказали:
$SQLite3->querySingle("SELECT COUNT(*) FROM orders WHERE status_deal = 100 AND deal_update >= datetime('now')");
неверно учитывает время now +3 часа прибавляет
Как надо чтобы оно было одинаковым ?
Проблема в вашем запросе, скорее всего, связана с тем, что datetime('now') в SQLite возвращает время по UTC, а вы, вероятно, работаете в часовом поясе UTC+3 (например, Москва).
То есть:
sqldatetime('now')
= текущее UTC-время (например, если у вас 15:00 по Москве, то вернётся 12:00)
Чтобы запрос работал с вашим локальным временем (например, UTC+3), используйте datetime('now', '+3 hours'):
php$SQLite3->querySingle("SELECT COUNT(*) FROM orders WHERE status_deal = 100 AND deal_update >= datetime('now', '+3 hours')");
Это прибавит 3 часа к now, и сравнение будет с локальным временем.
deal_update к UTCЕсли вы хотите наоборот — чтобы всё считалось в UTC, то нужно сохранять deal_update в UTC. Тогда не надо будет прибавлять часы вообще:
php$SQLite3->querySingle("SELECT COUNT(*) FROM orders WHERE status_deal = 100 AND deal_update >= datetime('now')");
Но это работает только если вы сохраняете дату в UTC, что часто предпочтительнее.
Если у вас даты хранятся в локальном времени → используйте datetime('now', '+3 hours')
Если в UTC → используйте просто datetime('now') и храните всегда в UTC
Хочешь — могу помочь проверить, в каком формате у тебя сохраняются даты в deal_update.
Отличный вопрос!
Чтобы вычесть 7 дней, но при этом прибавить 3 часа (то есть работать в часовом поясе UTC+3), нужно просто указать оба модификатора в datetime() через запятую:
php$SQLite3->querySingle("SELECT COUNT(*) FROM orders WHERE status_deal = 100 AND deal_update >= datetime('now', '-7 days', '+3 hours')");
'now' — текущее UTC-время
'-7 days' — отнимаем 7 дней
'+3 hours' — прибавляем 3 часа (то есть сдвигаем к вашему часовому поясу)
Порядок важен: сначала вычитаются дни, потом прибавляются часы.
Если ты хочешь вообще всё время считать в московском времени (UTC+3), можно использовать:
phpdatetime('now', 'localtime', '-7 days')
Но это будет работать корректно только если системное локальное время настроено правильно (на сервере/хостинге), что не всегда гарантировано. Так что модификатор '+3 hours' — более надёжный способ.
Нужно помочь проверить, как даты хранятся в deal_update — в UTC или локально?
Чтобы определить, в каком часовом поясе (UTC или локальное время) у тебя хранятся даты в столбце deal_update, можно просто сделать небольшой SQL-запрос и сравнить результат с текущим временем по Москве и по UTC.
Выполни в SQLite:
php$SQLite3->querySingle("SELECT deal_update FROM orders ORDER BY deal_update DESC LIMIT 1");
Или напрямую в SQLite:
sqlSELECT deal_update FROM orders ORDER BY deal_update DESC LIMIT 1;
Скопируй это значение и сравни его с текущим временем по Москве и по UTC.
datetime('now')Выполни:
sqlSELECT datetime('now') AS utc_now, datetime('now', '+3 hours') AS moscow_now;
Ты получишь:
yamlutc_now | moscow_now
--------------|----------------
2025-08-21 10:00:00 | 2025-08-21 13:00:00
Теперь сравни это с тем, что вернулось из deal_update.
Если в deal_update было:
yaml2025-08-21 13:00:00
А datetime('now') показывает:
yaml2025-08-21 10:00:00
→ значит, в deal_update сохраняется локальное время (UTC+3).
Если наоборот:
yamldeal_update: 2025-08-21 10:00:00
→ значит, всё в UTC.
Если в UTC: ничего не прибавляй, просто используй datetime('now'), datetime('now', '-7 days') и т.д.
Если в локальном времени (UTC+3): всегда добавляй '+3 hours' в запросах (как ты уже начал делать)
Если хочешь — можешь скинуть значение deal_update, я помогу точно определить.