Membuat Time in Sentence Seperti di Facebook

Posted on Updated on

Udah lama juga ya ternyata gue ngga posting di blog gue, hmm ya udah kali ini gue pengen sharing sesuatu,
yaitu caranya buat waktu yg sudah berlaku seperti di facebook berdasarkan time() (unixtime) di php.

misalnya “1 Tahun 3 bulan dan 4 hari yang lalu”

pake function timeInSentence() ini aja.

/*
 * timeInStenence() by mrlemonade (moshimon.wordpress.com)
 */

function timeInSentence($val, $lang = 'id', $word = 0, $x = 0, $res = array()) {

  $y = array(31536000, 2592000, 604800, 86400, 3600, 60, 1);
  $l['id'] = array('tahun', 'bulan', 'minggu', 'hari', 'jam', 'menit', 'detik');
  $l['en'] = array('year', 'month', 'week', 'day', 'hour', 'minute', 'second');

  $end['id'] = 'yang lalu';
  $end['en'] = 'ago';

  while($x < count($y)) {

    $a = $val % $y[$x];
    if($a != 0) {
      $res[$l[$lang][$x]] = floor($val/$y[$x]);
      $val = $a;
    }
    else {
       $res[$l[$lang][$x]] = $val/$y[$x];
       $val = 0;
    }

    return timeInSentence( $val, $lang, $word, $x + 1, $res);
  }

  $hasil = '';
  if($word == 0)
    $word = count($l[$lang]-1);

  if($lang == 'id')
    $hasil = 'sekitar ';
  if($lang == 'en')
    $hasil = 'about ';

  $i = 0;

  foreach($res as $k => $v) {
    if($v > 0) {
      if($i == $word)
        break;

      $res2[$k] = $v;
      $key[$i] = $k;
      $i++;
    }
  }

  $bates = count($res2);
  for($i=0;$i<$bates;$i++) {
    $angka = $res2[$key[$i]];
    $kata = $key[$i];

    if($lang == 'en' && $angka > 1)
      $kata .= 's';

    if($i+1 == $bates && $word != 1) {
      if($lang == 'en')
        $angka = 'and '.$angka;

      if($lang == 'id')
        $angka = 'dan '.$angka;
    }
    $hasil .= $angka.' '.$kata.' ';
  }

  return trim($hasil.$end[$lang]);
}

contoh penggunaan:

<?php

$time = mktime(12, 40, 33, 6, 10, 2009); // 10 July 2009 12:40:33
$timediff = time() - $time;

$bar[1] = timeInSentence($timediff, 'id', 1);
$bar[2] = timeInSentence($timediff, 'id', 2);
$bar[3] = timeInSentence($timediff, 'id', 3);
$bar[4] = timeInSentence($timediff, 'id', 4);
$bar[5] = timeInSentence($timediff, 'id', 5);
$bar[6] = timeInSentence($timediff, 'id', 6);
$bar[7] = timeInSentence($timediff, 'id', 7);

print_r($bar);

Output:

Array
(
    [1] => sekitar 2 tahun yang lalu
    [2] => sekitar 2 tahun dan 5 bulan yang lalu
    [3] => sekitar 2 tahun 5 bulan dan 2 minggu yang lalu
    [4] => sekitar 2 tahun 5 bulan 2 minggu dan 4 hari yang lalu
    [5] => sekitar 2 tahun 5 bulan 2 minggu 4 hari dan 5 jam yang lalu
    [6] => sekitar 2 tahun 5 bulan 2 minggu 4 hari 5 jam dan 9 menit yang lalu
    [7] => sekitar 2 tahun 5 bulan 2 minggu 4 hari 5 jam 9 menit dan 31 detik yang lalu
)

not bad yah? 🙂

Advertisements

One thought on “Membuat Time in Sentence Seperti di Facebook

    iyan said:
    April 24, 2012 at 3:20 pm

    wah..siip menarik bget sob, tp entah kenapa aku coba mendapatkan kegagalan terus. tp akan terus ku coba hahaha.. salam dariku 🙂

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s