2017-03-20 31 views
0

2個月之間過濾如何按日期過濾它們存儲的時區?

我需要根據選定的月份過濾數據。

我們將數據保存在UTC-0中,需要讀取UTC+1中的數據。

現狀:

如果我們在DB日期像28-02-2017 23:55 (UTC-0)保存並過濾三月(03-2017),我應該可以看到結果(UTC+1)此輸入,如果我們有像輸入我31-03-2017 23:55 (UTC-0)不應在結果中看到此輸入(UTC+1)。

嘗試:

$fromDate = new Chronos('2017-03-01 00:00:00', 'Europe/Vienna'); 
$toDate = new Chronos('2017-04-01 00:00:00', 'Europe/Vienna'); 

$q = $this->Users->find('all') 
->where(function ($exp, $q) use ($fromDate, $toDate) { 
    return $exp->between('Users.created', $fromDate, $toDate); 
}); 

回答

1

調試您已經創建有日期的對象,他們會堅持他們是指什麼時區,你已經通過了確切的日期和信息,因此當傳入查詢時,您將與這些確切日期進行比較 - 數據庫(層)不關心時區,它根本就不知道它們。

您需要的日期轉換爲日期最初被存儲在時區,即UTC:

$fromDate = new Chronos('2017-03-01 00:00:00', 'Europe/Vienna'); 
$fromDate = $fromDate->setTimezone('UTC'); 

$toDate = new Chronos('2017-04-01 00:00:00', 'Europe/Vienna'); 
$toDate = $toDate->setTimezone('UTC'); 

的日期現在應該是這樣的:

object(Cake\Chronos\Chronos) { 
    'time' => '2017-02-28 23:00:00.000000', 
    'timezone' => 'UTC', 
    'hasFixedNow' => false 
} 

object(Cake\Chronos\Chronos) { 
    'time' => '2017-03-31 22:00:00.000000', 
    'timezone' => 'UTC', 
    'hasFixedNow' => false 
} 
+0

謝謝!我被教導'歐洲/維也納'會自動將給定的DateTime轉換爲-1。 – JohnWayne