記一次關於 timestamp 無法檢索時分秒的排坑記錄

Janpun發表於2020-03-17

由於評論反饋timestamp是準確的,而我確實又測出了不準確,所以懷疑可能跟時區有關係,但我還沒能驗證這個問題,所以以下記錄僅供參考,希望有知道的人能幫忙解答。


最近做一個專案需要精確地按照具體幾點幾分來檢索資料庫中的記錄,我平常都是使用laravel資料庫遷移中預設的timestamp來記錄時間的,即created_atupdated_at的資料型別都是timestamp

遇到這個需求我想當然的採用下面的這種方式來檢索

Model::where('created_at', '>', '2020-01-01 12:35:06')->get();

然後發現這個檢索只精確到日,會直接拋棄後面的時分秒,顯然不滿足我的需求。

於是我找到文件,發現裡面有whereDatewhereTime,於是我自作聰明的組合起來,也就成了這樣

Model::whereDate('created_at', '>', '2020-01-01')->whereTime('created_at', '>', '12:35:06')->get();

然後發現結果也不對,這裡解析出來的結果是日期大於2020-01-01且時間大於12:35:06,並不是我要的日期時間大於2020-01-01 12:35:06

後來我就發了一個帖子來詢問這個問題,得到的答案跟我一開始想的一樣,但是我卻得不到這樣的結果。

這時候我加了個群,想著找個人聊聊吧,還真找到了,在群裡得知,timestamp有坑,得換成datetime,我試了下,果然,蒼天啊,我要的結果終於出現了。

我也不知道laravel為什麼要用timestamp,不知道替換成datetime是不是最好的答案,不過問題暫時解決了,寫這一篇文章給後面有需要的人提供一個解決方案吧,如果有大神知道這裡面的蹊蹺,希望能幫忙解釋下。

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章