26 Sep 2013

Menghitung Selisih Dua Datetime dengan PHP

Apakah anda pernah lihat diportal berita, seperti Artikel ini ditulis 50 menit yang lalu. Sekara... thumbnail 1 summary

Apakah anda pernah lihat diportal berita, seperti Artikel ini ditulis 50 menit yang lalu. Sekarang kita tidak akan membuat aplikasi portal beritanya, namun kita akan membuat bagaimana menghitung selisih jam antara dua datetime.

Ketiklah 2 function ini pada sebuah file php

function xTimeAgo ($oldTime, $newTime, $timeType) {
        $timeCalc = strtotime($newTime) - strtotime($oldTime);       
        if ($timeType == "x") {
            if ($timeCalc = 60) {
                $timeType = "m";
            }
            if ($timeCalc = (60*60)) {
                $timeType = "h";
            }
            if ($timeCalc = (60*60*24)) {
                $timeType = "d";
            }
        }       
        if ($timeType == "s") {
            $timeCalc .= " seconds ago";
        }
        if ($timeType == "m") {
            $timeCalc = round($timeCalc/60) . " menit yang lalu";
        }       
        if ($timeType == "h") {
            $timeCalc = round($timeCalc/60/60) . " jam yang lalu";
        }
        if ($timeType == "d") {
            $timeCalc = round($timeCalc/60/60/24) . " hari yang lalu";
        }       
        return $timeCalc;
    }
   
function timeAgo($timestamp){
    date_default_timezone_set('Asia/Jakarta');
    $skrg=date("Y-m-d H:i:s");
    $isi= str_replace("-","",xTimeAgo($skrg,$timestamp,"m"));
    $isi2= str_replace("-","",xTimeAgo($skrg,$timestamp,"h"));
    $isi3= str_replace("-","",xTimeAgo($skrg,$timestamp,"d"));
    $go="";
    if($isi > 60)
    {
        $go=$isi2;
    }elseif($isi2 > 24)
    {
        $go=$isi3;
    }elseif($isi < 61)
    {
        $go=$isi;
    }
    return $go;
}

Fungsi dari function tersebut sebagai berikut :

1. xTimeAgo
Berfungsi untuk menghitung diff /selisih 2 datetime dan menjadikannya ke format menit,jam atau hari

2. timeAgo
Berfungsi untuk menimbang hasil xTimeAgo, jika jam menit lebih dari 60 maka dihitung jam, jika jam lebih dari 24 maka dihitung hari

Keterangan : date_default_timezone_set('Asia/Jakarta') adalah men-set timezone waktu Jakarta atau +7
Karena berita yang anda entrykan tersebut bagusnya bukan timezone server hosting/mysql
Untuk melihat lebih detail format timezone silahkan cek di sini

Lalu bagaimana cara menjalankannya ?
Cukup ketikkan :
echo timeAgo('2013-09-26 14:20:00');
Keterangan : Format timezone Mysql adalah Y-m-d H:i:s