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;
}
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',
}
};
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;
}
}
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',
);
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;
}
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',
);
}
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;
}
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',
);
}
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;
}
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;
}
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',
},
}
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);
Source code: DATE Format
Top comments (0)