[英]Laravel Carbon Date Difference between two dates
我的數據庫中有一個字段,它有一個使用時刻js的時間戳。 結果是這樣的。
["2018-02-11 11:30:17","2018-02-11 11:20:17","2018-02-11 11:10:17"]
但是當我從db返回created_at colum時,數組給出如下:
[{"date":"2018-02-11 11:40:17.000000","timezone_type":3,"timezone":"Asia\/Karachi"},{"date":"2018-02-11 11:40:31.000000","timezone_type":3,"timezone":"Asia\/Karachi"},{"date":"2018-02-11 11:40:40.000000","timezone_type":3,"timezone":"Asia\/Karachi"}]
那么我怎樣才能以碳可以理解的格式獲取兩個列日期? 我希望“starttime”列與“created_at”進行比較。 這可以實現嗎? 到目前為止,這是我的代碼:
$cleanStart = Clean::pluck('starttime')->toArray();
$cleanFinish = Clean::pluck('created_at')->toArray();
$from = Carbon::parse($cleanStart);
$to = Carbon::parse($cleanFinish);
$diff_in_hours = $to->diffInHours($from);
return $diff_in_hours;
但它給了我一個錯誤:
Type error: DateTime::__construct() expects parameter 1 to be string, array given
另外,我如何將陣列賦予碳。
所以最后這是我嘗試的事情:
$cleanCollection = Clean::get(['starttime','created_at']);
foreach($cleanCollection as $cleanObj){
$startTime = Carbon::parse($cleanObj->starttime);
$diff = $cleanObj->created_at->diffInseconds($startTime);
}
echo $diff;
但是當我刷新頁面時,值會以秒為單位變化。 如果添加了另一條記錄,它會再次累加。
Pluck將為您提供結果集中所有開始時間的數組,這就是您將數組傳遞給parse
。 你實際上得到了所有的開始時間和所有創建的ats,然后嘗試有效地比較所有。
你要么得到一個結果,
喜歡
$clean = Clean::first();
$from = Carbon::parse($clean->starttime);
$to = Carbon::parse($clean->created_at);
$diff_in_hours = $to->diffInHours($from);
或者,如果你想要每行,你必須迭代它們並做同樣的事情
Clean::all()->each(function ($clean) {
$from = Carbon::parse($clean->starttime);
$to = Carbon::parse($clean->created_at);
$diff_in_hours = $to->diffInHours($from); // for this row
});
您可以做的另一件事是在Clean模型上放置一個訪問器來幫助您解決這個問題
public function getDiffInHoursAttribute()
{
$from = Carbon::parse($this->starttime);
$to = Carbon::parse($this->created_at);
return $to->diffInHours($from);
}
然后
echo Clean::first()->diffInHours;
要么
foreach(Clean::all() as $clean) {
echo $clean->diffInHours;
}
此外,如果您將以下內容添加到模型中,Eloquent將自動將字符串解析為Carbon對象,以便您可以在代碼中跳過對Carbon :: parse()的需求
/**
* The attributes that should be mutated to dates.
*
* @var array
*/
protected $dates = [
'starttime'
];
嘗試將protected $dates
添加到Clean
模型中,如下所示:
/**
* The attributes that should be mutated to dates.
*
* @var array
*/
protected $dates = [
'created_at',
'updated_at'
];
正如您可以從代碼中的注釋中讀取的那樣,將所有應轉換為日期的列放入其中,這將有助於您更輕松地實現日期操作。
編輯1:
$start = new Carbon($cleanStart['date'], $cleanStart['timezone']);
$finish = new Carbon($cleanFinish['date'], $cleanFinish['timezone']);
然后你可以像這樣比較:
var_dump($start->eq($finish)); //Is start date same as finish date
var_dump($start->ne($finish)); //Is start date not same as finish date
var_dump($start->gt($finish)); //Is start date greater than finish date
var_dump($start->gte($finish)); //Is start date greater than or equal to finish date
var_dump($start->lt($finish)); //Is start date less than finish date
var_dump($start->lte($finish)); //Is start date less than or equal to finish date
編輯2:
為了使下面的代碼有效,您必須在EDIT 1
初始化$start
和$finish
日期
$ago = $start->diffForHumans($finish, true); //2 days OR 3 weeks OR 1 hour
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.