将两个给定日期之间的月、年和日计算为时间戳[重复]

Posted

技术标签:

【中文标题】将两个给定日期之间的月、年和日计算为时间戳[重复]【英文标题】:Calculate months, years and days between two given dates as timestamp [duplicate] 【发布时间】:2013-01-09 06:17:42 【问题描述】:

可能重复:How to calculate the difference between two dates using php?How to get difference between two dates in Year/Month/Week/Day?

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

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

这些时间戳的差异天数。

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

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

【参考方案2】:

您可以为此使用 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');

【讨论】:

【参考方案3】:

您可以使用 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 "

Documentation

【讨论】:

2 月份不工作,2 月份需要 31 天【参考方案4】:

你应该看看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

【讨论】:

以上是关于将两个给定日期之间的月、年和日计算为时间戳[重复]的主要内容,如果未能解决你的问题,请参考以下文章

计算SQL中两个日期之间的月数[重复]

C#将日期转换为时间戳[重复]

如何将日期转换为时间戳?

MySQL中日期之间的月差

根据输入的月和日,计算出是本年的第几天。

unix_timestamp 和强制转换为时间戳之间的区别