实现方式一
$now = time(); // or your date as well
$your_date = strtotime("2010-01-31");
$datediff = $now - $your_date;
echo round($datediff / (60 * 60 * 24));
实现方式二
我阅读了之前所有的解决方案,没有一个使用PHP 5.3工具:DateTime::Diff和DateInterval::Days
日期包含日期到日期之间确切的天数。
使用工具,意味着我们不需要编写代码,因为自己写的代码可能兼容性不是很好,还有可能有潜在的bug。
/**
* We suppose that PHP is configured in UTC
* php.ini configuration:
* [Date]
* ; Defines the default timezone used by the date functions
* ; http://php.net/date.timezone
* date.timezone = UTC
* @link http://php.net/date.timezone
*/
/**
* getDaysBetween2Dates
*
* Return the difference of days between $date1 and $date2 ($date1 - $date2)
* if $absolute parameter is false, the return value is negative if $date2 is after than $date1
*
* @param DateTime $date1
* @param DateTime $date2
* @param Boolean $absolute
* = true
* @return integer
*/
function getDaysBetween2Dates(DateTime $date1, DateTime $date2, $absolute = true)
{
$interval = $date2->diff($date1);
// if we have to take in account the relative position (!$absolute) and the relative position is negative,
// we return negatif value otherwise, we return the absolute value
return (!$absolute and $interval->invert) ? - $interval->days : $interval->days;
}
echo '
2020-03-01 - 2020-02-01: 29 days as it\'s a standard leap year
';echo getDaysBetween2Dates(new DateTime("2020-03-01"), new DateTime("2020-02-01"), false);
echo '
1900-03-01 - 1900-02-01: 28 days as it\'s a "standard" century
';echo getDaysBetween2Dates(new DateTime("1900-03-01"), new DateTime("1900-02-01"), false);
echo '
2000-03-01 - 2000-02-01: 29 days as it\'s a century multiple of 400: 2000=400x5
';echo getDaysBetween2Dates(new DateTime("2000-03-01"), new DateTime("2000-02-01"), false);
echo '
2020-03-01 - 2020-04-01: -28 days as 2020-03-01 is before 2020-04-01
';echo getDaysBetween2Dates(new DateTime("2020-02-01"), new DateTime("2020-03-01"), false);
share
原创文章,作者:犀牛前端部落,如若转载,请注明出处:https://www.pipipi.net/4563.html