Laravel MongoDB 時間區間查詢的問題

她來聽我的演唱會發表於2020-04-10

laravel下使用MongoDB擴充套件,有預設時間,兩個欄位為created_at和updated_at,時間格式為:

"updated_at" => UTCDateTime {#419 ▼
   +"milliseconds": "1560842012000"
 }

UTCDateTime 的格式為物件,有兩種查詢方式,一種為:

 $today = Carbon::today();
 $tomorrow = Carbon::today()->addDays(1);
 $res = MongoLog::where("created_at",">",$today)->where("created_at","<",$tomorrow)->get();

此處的 $today和$tomorrow為datatime物件,但是並不能使用wherebetween查詢,帶來諸多不便。wherebetween查詢條件為陣列,陣列裡面的元素為字串或者是整型。

另一種為:

把datetime轉為UTCDateTime格式進行查詢:

詳情見:https://blog.csdn.net/u012560213/article/d...

事例裡使用了time()函式,為當前時間的時間戳,不能滿足要求,所以改為strtotime()

程式碼:

$t1 = Carbon::today()->toDateTimeString();
$t2 = Carbon::today()->subDays(7)->toDateTimeString();

//轉為時間戳再轉為UTCDateTime
$a1 = new UTCDateTime(strtotime($t1)*1000);
$a2 = new UTCDateTime(strtotime($t2)*1000);
$res = AccessLog::whereBetween("created_at",[$a2,$a1])->get();

注意:UTCDateTime格式為毫秒,可以在

vendor\jenssegers\mongodb\src\Jenssegers\Mongodb\Auth的DatabaseTokenRepository.php

中看到:

laravel mongodb時間區間查詢的問題

轉為UTCDateTime後就可以愉快的使用whereBetween進行查詢了。

另外,如果使用mongodb,可以在存入資料的時候,附帶存入時間戳,後續進行查詢也更方便!

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

相關文章