我有一個MySQL資料庫,有一個帶有orders和timestamp列created_at的表
所有時間戳均以UTC格式存儲,並轉換回前端的用戶本地時間-當前設置為「'Europe/London」,
用戶可以搜索在特定日期之間創建的所有訂單,在MySQL中,我使用以下函數將日期轉換回本地時區,例如:SELECT *
FROM orders
WHERE DATE(CONVERT_TZ(created_at, 'UTC','Europe/London')) >= '27-10-2019'
AND DATE(CONVERT_TZ(created_at, 'UTC','Europe/London')) <= '27-10-2019'
我想將其保留為'UTC'以適應將來的其他時區。
是否有辦法在不使用命名時區的情況下返回正確的結果?
請注意,查詢實際上是使用php中的laravels eloqeunt查詢生成器編寫的,如下所示:if (isset($queryString['from_date'])) {
$query = $query->whereRaw('DATE(orders.created_at) >= ?', [Carbon::parse($queryString['from_date'])->format('Y-m-d')]);
}
if (isset($queryString['to_date'])) {
$query = $query->whereRaw('DATE(orders.created_at) <= ?', [Carbon::parse($queryString['to_date'])->format('Y-m-d')]);
}
起初,我認為解決方案是將用戶輸入的日期也轉換為UTC,但是當我在以下日期創建訂單時,結果將丟失第二條記錄:created_at
-------------------------------------------------------------
27-10-2019 00:00 (localtime) - saved as 26-10-2019 23:00 (UTC)
27-10-2019 01:00 (localtime) - saved as 27-10-2019 00:00 (UTC)