我需要找到两个时间戳之间的天数差异。
$now = date("Y-m-d");
//This return 2017-01-04
$last_active = date("Y-m-d", strtotime($user->updated_at->toDateTimeString()));
//This returns for example: 2016-07-20
$datediff = $now - $last_active;
$days = floor($datediff/(60*60*24));
此代码每天返回0美元。
然而,似乎$now
和$last_active
作为字符串工作,因此我不能将两者相互减去,然后$ days将只返回0.
如何从彼此中减去这两个?我需要将它们解析为某种变量,我可以将这两个变量减去。
到目前为止,我尝试了以下内容:
Finding the number of days between two dates 这不起作用,因为我的变量是字符串,是我的猜测。
此外,我尝试将日期解析为整数,但这会导致,例如20170104 - 20160720,它给出的值与两者中的天数差异无关。
希望获得一些有用的指示
最诚挚的问候, 帕特里克
答案 0 :(得分:1)
由于您使用的是Laravel,因此您可以直接使用Carbon。使用diff...()
方法,包括diffInDays
,diffForHumans()
和其他方法:
Carbon::parse($stringDate)->diffInDays(Carbon::now());
如果您需要比较两天(与现在不同),请使用其他parse()
代替now()
。
答案 1 :(得分:1)
使用Carbon可以非常轻松地完成此操作。 http://carbon.nesbot.com/docs/#api-difference
如果您正在使用字符串,则应该可以使用
$date1 = Carbon\Carbon::parse('January 4th 2017');
$date2 = Carbon\Carbon::parse('January 1st 2017');
这将为您提供两个碳对象,您现在可以使用它们进行比较。
$days = $date1->diffInDays($date2);
使用Laravel时间戳,你可以获得一个开箱即用的碳物体。所以使用你的例子,你应该能够做到这一点。
$days = $user->updated_at->diffInDays(Carbon::now());
答案 2 :(得分:1)
在两个日期上使用strtotime()
进行比较,将它们计算为自UNIX纪元(1970年1月1日00:00:00 UTC)以来的秒数。
http://php.net/manual/en/function.strtotime.php
示例:
$now = date("Y-m-d");
$last_active = date("Y-m-d", strtotime($user->updated_at->toDateTimeString()));
$current = strtotime($now);
$last = strtotime($last_active);
$diff = $current - $last;
$days = floor($diff/(60*60*24));
答案 3 :(得分:0)
使用PHP diff()
函数
$now = new DateTime();
$last_active = new DateTime($user->updated_at->toDateTimeString());
$interval = $now ->diff($last_active);
$difference = $interval->format('%a');
echo $difference;