DEV Community

andysaktia
andysaktia

Posted on • Updated on

Format Tanggal Indonesia

Ketika saya bekerja dalam ekosistem yang menggunakan data json dari drupal, saya menemukan masalah berkaitan data inputan drupal. Data tersebut berupa tanggal mulai dan akhir suatu events, yang berbentuk sebagai berikut;

date_start => <time datetime=\"2020-06-22T04:30:00Z\" class=\"datetime\">Mon, 22/06/2020 - 11:30</time>\n

Dalam kasus saya karena pengambilan dan pengolahan data menggunakan PHP. Saya mencoba membuat script untuk mengolah data yang saya dapat dari drupal tersebut menjadi data yang menginformasikan hari, tanggal, dan waktu. Dimana hari dan bulan diubah ke dalam format bahasa Indonesia.

1. Membuat Array Tanggal

Hal pertama yang dilakukan adalah mengambil data mulai dan akhir suatu events. Dan mengolahnya menjadi data array baru yang hanya barisi data tanggal start dan end:

function getArrayDateApi($data) {
    $result = array();
    foreach($data as $key => $val) {
     $date = array();
     $date['start'] = $val['date_start'];
     $date['end'] = $val['date_end'];
     $result[$key] = $date;
    }
    return $result;
}
Enter fullscreen mode Exit fullscreen mode

Script di atas akan menhasilkan array yang berbentuk sebagai berikut:

array{
 0 => array{
    'start' => '<time datetime=\"2020-06-22T04:30:00Z\" class=\"datetime\">Mon, 22/06/2020 - 11:30</time>\n',
    'end' => '<time datetime=\"2020-06-22T04:30:00Z\" class=\"datetime\">Mon, 22/06/2020 - 11:30</time>\n',
 },
 1 => array{
    'start' => '<time datetime=\"2020-06-22T04:30:00Z\" class=\"datetime\">Mon, 22/06/2020 - 11:30</time>\n',
    'end' => '<time datetime=\"2020-06-22T04:30:00Z\" class=\"datetime\">Mon, 22/06/2020 - 11:30</time>\n',
 }
};
Enter fullscreen mode Exit fullscreen mode

2. Mengelompokan Data

Langkah selanjutnya adalah dengan pengelompokan data, saya akan mengelompokannya menjadi tiga data yang diantaranya; Nama hari, tanggal dan waktu. Berikut fungsi untuk menghandel pengelompokan data ini.

class DateTimeFormat
{
    public $arr_start;
    public $arr_end;

    public function getArrStart($data)
    {
      $s = explode('>', $data);
      $r = preg_replace('/([a-z]+)\, (\d+\/\d+\/\d+) \- (\d+\:\d+)/is', '\1 \2 \3 ', $s[1]);
      $arr = explode(' ', $r);
      $this->arr_start = $arr;
      return $arr;
    }
}
Enter fullscreen mode Exit fullscreen mode

Pengelompokan terjadi setelah bagian script preg_replace dilakukan \1 untuk nama hari, \2 untuk tanggal, dan \3 untuk waktu. Hasil dari fungsi diatas akan berupa array karena dihandel explode. Array yang akan dihasilkan akan berbentuk seperti berikut:

array(
  0 => 'Mon',
  1 => '22/06/2020',
  2 => '11:30',
);
Enter fullscreen mode Exit fullscreen mode

Dan $this dalam fungsi mengirimkan data $arr ke variabel $arr_start. Fungsi diatas tentunya hanya untuk tanggal mulai, sehingga untuk handel tanggal akhir perlu buat hal yang sama dan mengirimkan data arraynya ke $arr_end.

3. Pengolahan Data Hari

Setelah saya mendapat data hari dalam variabel $arr_start atupun $arr_end. Langkah berikutnya saya akan mengolah data hari yang dalam kasus ini terdapat pada index 0. saya buat fungsi berikut di dalam class yang sama:

    public function getDay()
    {
      $arr_hari = $this->getNamaHari();
      $arr_s = $this->arr_start;
      $arr_e = $this->arr_end;
      $hari_s = $arr_s['0']; // ambil data hari pada array
      $hari_s = $arr_hari[$hari_s]; //ambil data hari Indonesianya
      $hari_e = $arr_s['0'];
      $hari_e = $arr_hari[$hari_e];
      // Alur logis ketika hari start dan ending sama maka saya akan menggunakan data satu saja, yaitu hari start
      if($hari_s == $hari_e){
         $hari = $hari_s;
      }else{
         $hari = '';
      }
      return $hari;
    }
Enter fullscreen mode Exit fullscreen mode

Pada awal script dimulai saya mengambil terlebih dahulu data nama hari berbahasa Indonesia, yang tentunya diambil dari fungsi yang saya buat sebagai berikut:

    public function getNamaHari()
    {
        return array(
              'Sun' => 'Minggu',
              'Mon' => 'Senin',
              'Tue' => 'Selasa',
              'Wed' => 'Rabu',
              'Thu' => 'Kamis',
              'Fri' => 'Jumat',
              'Sat' => 'Sabtu',

        );
    }
Enter fullscreen mode Exit fullscreen mode

4. Pengolahan Data Tanggal

Setelah handel data hari, selanjutnya saya dapat mengolah data tanggal yang terdapat pada index 1. Bentuk data tanggal adalah 22/06/2020. Fungsi yang saya buat di dalam class sebagai berikut:

public function getDate()
    { 
      //#Ambil nama-nama bulan array
      $arr_bulan = $this->getNamaBulan();
      //#Ambil data tanggal array
      $arr_s = $this->arr_start;
      $arr_e = $this->arr_end;
      //#Olah data tanggal array
      $dat_s = explode('/', $arr_s['1']); // buat tanggal jadi array berdasarkan no.tgl/no.bulan/no.tahun
      $dat_e = explode('/', $arr_e['1']);
      $num_s = $dat_s['0']; //ambil data no.tgl
      $num_e = $dat_e['0'];
      $bulan_s = $dat_s['1']; // ambil data no.bulan
      $bulan_s = $arr_bulan[$bulan_s]; // kolerasikan no.bulan dalam bhs Indo
      $bulan_e = $dat_e['1'];
      $bulan_e = $arr_bulan[$bulan_e];

      //#Format keluaran data
      //11 juni 2020
      //12-14 juni 2020
      //11 juni - 12 july 2020
      if ($bulan_s == $bulan_e && $num_s == $num_e){
         $date = $num_s . ' ' . $bulan_s . ' ' . $dat_s['2'];
      } elseif ($bulan_s == $bulan_e && $num_s != $num_e){
         $date = $num_s . '-' . $num_e . ' ' . $bulan_s . ' ' . $dat_s['2'];
      } else {
         $date = $num_s . ' ' . $bulan_s . '-' . $num_e . ' ' . $bulan_e .' ' . $dat_s['2'];
      }

      return $date;
    }
Enter fullscreen mode Exit fullscreen mode

Pemganggilan fungsi getNamaBulan merupakan data array untuk nama-nama bulan dalam bahasa indonesia berdasarkan angka yang didapat. Fungsinya sebagai berikut:

    public function getNamaBulan()
    {
        return array(
              '01' => 'Januari',
              '02' => 'Februari',
              '03' => 'Maret',
              '04' => 'April',
              '05' => 'Mei',
              '06' => 'Juni',
              '07' => 'Juli',
              '08' => 'Agustus',
              '09' => 'September',
              '10' => 'Oktober',
              '11' => 'November',
              '12' => 'Desember',

        );
    }
Enter fullscreen mode Exit fullscreen mode

5. Pengolahan Data Waktu

Bagian terakhir dari data array adalah waktu yang terdapat pada index 2. Bagian ini data diolah melalui fungsi sebagai:

    public function getTime()
    {
      $arr_s = $this->arr_start;
      $arr_e = $this->arr_end;
      $arr_s = $arr_s[2];
      $arr_e = $arr_e[2]; 
       return $arr_s . '-' . $arr_e;
    }
Enter fullscreen mode Exit fullscreen mode

6.Menggabungkan Semua Data

Langkah terakhir menggabungkan semua data menjadi satu data array yang nantinya dapat digunakan untuk pemanggilan data di template file php.

public function getArrayDateFormat($data) {
    $result = array();
        foreach($data as $key => $val) {
         $date = array();
         $this->getArrStart($val['start']);
         $this->getArrEnd($val['end']);
         $date['hari'] = $this->getDay();
         $date['tanggal'] = $this->getDate();
         $date['waktu'] = $this->getTime();
         $result[$key] = $date;
        }

    return $result;
    }
Enter fullscreen mode Exit fullscreen mode

Pada script saya asumsikan data akan berupa array, alias bisa banyak data untuk diolah, dan diproses dengan memanggil fungsi-fungsi pengolahan data nama hari, tanggal, dan waktu. Hasil array akan berbentuk sebagai berikut:

array{
 0 => array{
    'hari' => 'Senin',
    'tanggal' => '22 Juni 2020',
    'waktu' => '11:30 -12:00',
 },
 1 => array{
    'hari' => 'Senin',
    'tanggal' => '22 Juni 2020',
    'waktu' => '11:30 -12:00',
 },
}
Enter fullscreen mode Exit fullscreen mode

7. Cara Pemakaian Script

Cara menggunakannya sendiri terlebih dahulu kita new dulu class yang script, kemudian panggil data events dengan fungsi getArrayDateApi, lalu olah dengan classnya.

$dateformat = new DateTimeFormat;
$res_events_se = getArrayDateApi($events);
$res_events_date = $dateformat->getArrayDateFormat($res_events_se);
Enter fullscreen mode Exit fullscreen mode

Source code: DATE Format

Top comments (0)