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
中看到:
轉為UTCDateTime後就可以愉快的使用whereBetween進行查詢了。
另外,如果使用mongodb,可以在存入資料的時候,附帶存入時間戳,後續進行查詢也更方便!
本作品採用《CC 協議》,轉載必須註明作者和本文連結