Month: November 2011

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