Rabu, 06 Juli 2011

Mencari selisih dua tanggal yang berbeda dalam satuan bulan dan hari menggunakan PHP

Kemarin saya punya kasus dalam pemrograman php mengenai cara pencarian selisih dua buah tanggal.

Dalam kesempatan ini, saya mencoba berbagi pengalaman dalam memecahkan masalah tersebut.

Contoh :
tanggal 1 : 2011 - 06 - 12
tanggal 2 : 2012 - 06 - 12

Maka selisih dari dua tanggal tersebut adalah 12 bulan 0 hari.

berikut adalah fungsi dalam php yang ingin saya bagikan saat ini.

<?php

function hari ($t1, $t2, $precision = 6, $abbr = false) {
    if (preg_match('/\D/', $t1) && ($t1 = strtotime($t1)) === false)
        return false;

    if (preg_match('/\D/', $t2) && ($t2 = strtotime($t2)) === false)
        return false;

    if ($t1 > $t2)
        list($t1, $t2) = array($t2, $t1);

    $diffs = array(
        'year' => 0,
       'month' => 0, 'day' => 0,
      
    );

    $abbrs = array(
            'year' => 'year',
         'month' => 'mth', 'day' => 0,
    );

    foreach (array_keys($diffs) as $interval) {
        while ($t2 >= ($t3 = strtotime("+1 ${interval}", $t1))) {
            $t1 = $t3;
            ++$diffs[$interval];
        }
    }

    $stack = array();
    foreach ($diffs as $interval => $num)
        $stack[] = array($num, ($abbr ? $abbrs[$interval] : $interval) . ($num != 1 ? 's' : ''));

    $ret = array();
    while (count($ret) < $precision && ($item = array_shift($stack)) !== null) {
        if ($item[0] >= 0)
            $ret[] = "{$item[0]} {$item[1]}";
    }
    return implode(', ', $ret);
}



?>

untuk memanggil fungsi tersebut paste kan kode berikut tepat dibawah program diatas.

<?php
$t1 = "2014-12-21";
$t2 = "2011-12-21";

$selisih = hari($t1,$t2);

echo $selisih;
?>

Demikian lah cara untuk mencari selisih dua buah tanggal yang berbeda dari saya.
Semoga bermanfaat.
:)
         

Tidak ada komentar:

Posting Komentar