我有一个datetime字段在我的MySQL数据库。我正在使用Laravel和Carbon库已经包含在内。我正在构建一个函数来比较这个datetime字段与当前日期。目前,在Carbon中使用diffInDays函数时,结果如下:
Datetime field | current time | result
2016-09-13 23:59:59 | 2016-09-14 16:42:12 | 0
2016-09-13 12:05:59 | 2016-09-14 16:42:12 | 1
2016-09-12 23:59:59 | 2016-09-14 16:42:12 | 1
2016-09-12 12:05:59 | 2016-09-14 16:42:12 | 2
但是,我只想比较日期,所以我希望结果是:
Datetime field | current time | result
2016-09-13 23:59:59 | 2016-09-14 16:42:12 | 1
2016-09-13 12:59:59 | 2016-09-14 16:42:12 | 1
2016-09-12 23:59:59 | 2016-09-14 16:42:12 | 2
2016-09-12 12:05:59 | 2016-09-14 16:42:12 | 2
是否已经在PHP/Carbon/其他库中预先构建了这个函数?
要做到这一点,最简单的方法是使用DateTimeImmutable,将时间设置为午夜(例如),然后执行diff。这将获得您想要的结果
$start = new DateTimeImmutable ("20160101T1530", $dtz);
$stop = new DateTimeImmutable ("20160102T1300", $dtz);
// DateTimeImmutable returns new objects when modified.
$chkStart = $start->modify ("midnight");
$chkStop = $stop->modify ("midnight");
// Setting second flag to "true" to get absolute difference.
$diff = $chkStart->diff ($chkStop, true);
您可以试试下面的代码
$checkDate = "2016-09-13 23:59:59";
$convertData = Carbon::parse($checkDate)->format('Y-m-d');
$createdObject = new Carbon($convertData);
$now = Carbon::now();
$difference = $now->diffInDays($createdObject);
dd($difference);
如果carbon diff()不适合您,您可以尝试其他方法。
在你的控制器中写…
$date1 = 'Carbon'Carbon::createFromFormat('Y-m-d H:i:s', '2016-09-12 13:02:24');
$anotherDate = 'Carbon'Carbon::parse($date1)->format('Y-m-d');
$diff = $this->time_elapsed_string(strtotime($anotherDate));
return $diff; // 2
在控制器中创建一个方法…
private function time_elapsed_string($ptime)
{
$etime = time() - $ptime;
if ($etime < 1)
return '0 seconds';
$a = array( 24 * 60 * 60 => 'day');
foreach ($a as $secs => $str)
{
$d = $etime / $secs;
if ($d >= 1) {
$r = floor($d);
return intval($r);
}
}
}