Hướng dẫn php difference between 2 dates - sự khác biệt php giữa 2 ngày

Sử dụng điều này cho mã di sản (PHP <5.3). Để cập nhật giải pháp, hãy xem câu trả lời của Jurka bên dưới

Bạn có thể sử dụng strtotime () để chuyển đổi hai ngày thành thời gian unix và sau đó tính số giây giữa chúng. Từ điều này, khá dễ dàng để tính toán các khoảng thời gian khác nhau.

$date1 = "2007-03-24";
$date2 = "2009-06-26";

$diff = abs(strtotime($date2) - strtotime($date1));

$years = floor($diff / (365*60*60*24));
$months = floor(($diff - $years * 365*60*60*24) / (30*60*60*24));
$days = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24)/ (60*60*24));

printf("%d years, %d months, %d days\n", $years, $months, $days);

EDIT: Rõ ràng cách làm điều này giống như được mô tả bởi Jurka dưới đây. Mã của tôi thường chỉ được khuyến nghị nếu bạn không có PHP 5.3 hoặc tốt hơn. Obviously the preferred way of doing this is like described by jurka below. My code is generally only recommended if you don't have PHP 5.3 or better.

Một số người trong các bình luận đã chỉ ra rằng mã trên chỉ là một xấp xỉ. Tôi vẫn tin rằng đối với hầu hết các mục đích tốt, vì việc sử dụng một phạm vi là nhiều hơn để cung cấp cảm giác về thời gian đã trôi qua hoặc vẫn còn thay vì cung cấp độ chính xác - nếu bạn muốn làm điều đó, chỉ cần đưa ra ngày.

Bất chấp tất cả, tôi đã quyết định giải quyết các khiếu nại. Nếu bạn thực sự cần một phạm vi chính xác nhưng không có quyền truy cập vào Php 5.3, hãy sử dụng mã bên dưới (nó cũng sẽ hoạt động trong Php 4). Đây là một cổng trực tiếp của mã mà PHP sử dụng nội bộ để tính toán phạm vi, ngoại trừ nó không tính thời gian tiết kiệm ánh sáng ban ngày. Điều đó có nghĩa là nhiều nhất là giảm một giờ, nhưng ngoại trừ điều đó là chính xác.

= $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, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
    $days_in_month = array(31, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 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 _date_normalize($base, $result)
{
    $result = _date_range_limit(0, 60, 60, "s", "i", $result);
    $result = _date_range_limit(0, 60, 60, "i", "h", $result);
    $result = _date_range_limit(0, 24, 24, "h", "d", $result);
    $result = _date_range_limit(0, 12, 12, "m", "y", $result);

    $result = _date_range_limit_days(&$base, &$result);

    $result = _date_range_limit(0, 12, 12, "m", "y", $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", "m", "d", "h", "i", "s");
    $a = array_combine($key, array_map("intval", explode(" ", date("Y m d H i s", $one))));
    $b = array_combine($key, array_map("intval", explode(" ", date("Y m d H i s", $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) {
        _date_normalize(&$a, &$result);
    } else {
        _date_normalize(&$b, &$result);
    }

    return $result;
}

$date = "1986-11-10 19:37:22";

print_r(_date_diff(strtotime($date), time()));
print_r(_date_diff(time(), strtotime($date)));

Làm thế nào tôi có thể có được sự khác biệt giữa hai ngày trong PHP?

$ date1 = "2007-03-24"; $ date2 = "2009-06-26"; $ diff = abs (strtotime ($ date2) - strtotime ($ date1)); $ năm = sàn ($ diff / (365*60*60*24)); $ tháng = sàn (($ diff - $ năm*365*60*60*24) / (30*60*60*24)); $ days = FLOOR (($ diff - $ năm*365*60*60*24 - $ tháng*30*60*60*24)/ (60*60*24)); printf (" %d năm, %d tháng, %d ...

Làm thế nào để bạn tìm thấy sự khác biệt giữa hai ngày?

Sử dụng hàm Datedif khi bạn muốn tính toán chênh lệch giữa hai ngày. Đầu tiên đặt ngày bắt đầu vào một ô và ngày kết thúc ở một ngày khác. Sau đó nhập một công thức như một trong những điều sau đây. CẢNH BÁO: Tôi f start_date lớn hơn end_date, kết quả sẽ là #num !. when you want to calculate the difference between two dates. First put a start date in a cell, and an end date in another. Then type a formula like one of the following. Warning: If the Start_date is greater than the End_date, the result will be #NUM!.

Làm thế nào để bạn kiểm tra xem một ngày lớn hơn một ngày khác trong PHP?

Làm thế nào tôi có thể kiểm tra xem một ngày có lớn hơn ngày hôm nay trong PHP không ?..
$ date_now = new DateTime () ;.
$ date2 = new DateTime ("01/02/2016") ;.
if ($ date_now> $ date2) {.
echo 'lớn hơn' ;.
}else{.
Echo 'ít hơn' ;.

Làm thế nào tôi có thể tính giờ giữa hai ngày trong PHP?

$ hourDiff = vòng ((strtotime ($ time1) - strtotime ($ time2))/3600, 1);Chia cho 3600 vì có 3600 giây trong một giờ và sử dụng vòng () để tránh có nhiều vị trí thập phân. Dividing by 3600 because there are 3600 seconds in one hour and using round() to avoid having a lot of decimal places.