将字符串解析为时间戳以查找天数差异

时间:2017-01-04 17:27:14

标签: php string laravel date parsing

我需要找到两个时间戳之间的天数差异

$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,它给出的值与两者中的天数差异无关。

希望获得一些有用的指示

最诚挚的问候, 帕特里克

4 个答案:

答案 0 :(得分:1)

由于您使用的是Laravel,因此您可以直接使用Carbon。使用diff...()方法,包括diffInDaysdiffForHumans()和其他方法:

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;