分享PHP计算两个日期相差天数的代码

本文实例讲述了PHP计算两个日期相差天数的方法分享给大家供大家参考。具体实现方法如下:

rush:PHP;"> diff($date2); echo "difference " . $interval->y . " years," . $interval->m." months,".$interval->d." days "; // shows the total amount of days (not divided into years,months and days like above) echo "difference " . $interval->days . " days "; -------------------------------------------------------- OR

/**

  • Calculate differences between two dates with precise semantics. Based on PHPs DateTime::diff()
  • implementation by Derick Rethans. Ported to PHP by Emil H,2011-05-02. No rights reserved.
    /
    function _date_range_limit($start,$end,$adj,$a,$b,$result)
    {
    if ($result[$a] < $start) {
    $result[$b] -= intval(($start - $result[$a] - 1) / $adj) + 1;
    $result[$a] += $adj
    intval(($start - $result[$a] - 1) / $adj + 1);
    }
    if ($result[$a] >= $end) {
    $result[$b] += intval($result[$a] / $adj);
    $result[$a] -= $adj * intval($result[$a] / $adj);
    }
    return $result;
    }
    function _date_range_limit_days($base,$result)
    {
    $days_in_month_leap = array(31,31,29,30,31);
    $days_in_month = array(31,28,31);
    _date_range_limit(1,13,12,"m","y",&$base);
    $year = $base["y"];
    $month = $base["m"];
    if (!$result["invert"]) {
    while ($result["d"] < 0) {
    $month--;
    if ($month < 1) {
    $month += 12;
    $year--;
    }
    $leapyear = $year % 400 == 0 || ($year % 100 != 0 && $year % 4 == 0);
    $days = $leapyear ? $days_in_month_leap[$month] : $days_in_month[$month];
    $result["d"] += $days;
    $result["m"]--;
    }
    } else {
    while ($result["d"] < 0) {
    $leapyear = $year % 400 == 0 || ($year % 100 != 0 && $year % 4 == 0);
    $days = $leapyear ? $days_in_month_leap[$month] : $days_in_month[$month];
    $result["d"] += $days;
    $result["m"]--;
    $month++;
    if ($month > 12) {
    $month -= 12;
    $year++;
    }
    }
    }
    return $result;
    }
    function datenormalize($base,$result)
    {
    $result = _date_range_limit(0,60,"s","i",$result);
    $result = _date_range_limit(0,"h",24,"d",$result);
    $result = _date_range_limit_days(&$base,&$result);
    $result = _date_range_limit(0,$result);
    return $result;
    }
    /**
  • Accepts two unix timestamps.
    */
    function _date_diff($one,$two)
    {
    $invert = false;
    if ($one > $two) {
    list($one,$two) = array($two,$one);
    $invert = true;
    }
    $key = array("y","s");
    $a = array_combine($key,array_map("intval",explode(" ",date("Y m d H i s",$one))));
    $b = array_combine($key,$two))));
    $result = array();
    $result["y"] = $b["y"] - $a["y"];
    $result["m"] = $b["m"] - $a["m"];
    $result["d"] = $b["d"] - $a["d"];
    $result["h"] = $b["h"] - $a["h"];
    $result["i"] = $b["i"] - $a["i"];
    $result["s"] = $b["s"] - $a["s"];
    $result["invert"] = $invert ? 1 : 0;
    $result["days"] = intval(abs(($one - $two)/86400));
    if ($invert) {
    datenormalize(&$a,&$result);
    } else {
    datenormalize(&$b,&$result);
    }
    return $result;
    }
    $date = "2014-12-04 19:37:22";
    echo '
    ';
    print_r( _date_diff( strtotime($date),time() ) );
    echo '
    ';
    ?>

希望本文所述对大家学习PHP程序设计有所帮助。

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...