4

可能重复:
如何使用 PHP 计算两个日期之间的差异?
如何获得年/月/周/日两个日期之间的差异?

我正在尝试计算 PHP 中两个给定日期之间的年月日。

我也在使用那些日期的时间戳。有没有办法计算年月和

这些时间戳的差异天数。

例如,第一个日期是 2008 年 1 月 2 日。第二个日期是 2012 年 7 月 5 日。结果是 4 年 5 个月零 3 天。

我正在将时间戳作为日期输入,并想知道是否有任何可用的函数可以通过两个输入时间戳直接计算上述内容

4

4 回答 4

29

您可以为此使用 DateTime 对象(请注意 datetime 构造函数中缺少的“,”)。

$datetime1 = new DateTime('2 Jan 2008');
$datetime2 = new DateTime('5 July 2012');
$interval = $datetime1->diff($datetime2);
echo $interval->format('%y years %m months and %d days');
于 2013-01-25T09:55:04.807 回答
11

您可以使用 DateTime 轻松完成此操作:

$date1 = new DateTime("2008-01-02");
$date2 = new DateTime("2012-07-05");
$diff = $date1->diff($date2);

echo "difference " . $diff->y . " years, " . $diff->m." months, ".$diff->d." days "

文档

于 2013-01-25T09:55:36.070 回答
2

你应该看看Carbon,它是一个非常新的 PHP 5.3 库,位于 DateTime 之上,有很多有用的方法。

对于日期差异:

<?php
$dtOttawa = Carbon::createFromDate(2000, 1, 1, 'America/Toronto');
$dtVancouver = Carbon::createFromDate(2013, 1, 1, 'America/Vancouver');
echo $dtOttawa->diffInHours($dtVancouver);
echo $dtOttawa->diffInDays($dtVancouver);
echo $dtOttawa->diffInMinutes($dtVancouver);
echo $dtOttawa->diffInYears($dtVancouver);

如果你想要人类可读的差异:

$dt = Carbon::createFromDate(2011, 2, 1);

echo $dt->diffForHumans($dt->copy()->addMonth());              // 28 days before
echo $dt->diffForHumans($dt->copy()->subMonth());              // 1 month after
于 2013-01-25T10:03:51.000 回答
1

您可以从时间戳创建两个 DateTime 对象 (www.php.net/datetime)。调用 diff 方法时,您会得到一个 DateInterval 对象,该对象具有年和月的属性。

于 2013-01-25T09:54:26.043 回答