Halo semua welkam bek to mai cenel, pada kali ini gue mau berbagi insight mengenai Timestamp dengan mili sekon dan timestamp yang sudah terformat.
Seperti yang kita ketahui pada Laravel kita memiliki Library format date time yang bernama Carbon. Pada Javascript kita memiliki library yang bernama Moment. Nah, tapi pernah nggak ketemu kasus dimana anda harus mengolah tanggal di antara Javascript dan PHP dan harus memiliki timestamp?
Oke kita semua tau, pada Database biasanya format yang kita gunakan di Laravel adalah Y-m-d H:i:s (2019–01–01 15:16:19) karena kita mengikuti format timestamp di Database MySQL yaitu tipe data timestamp.
Nah format ini juga sering digunakan untuk dijadikan parameter urutan atau order by baik ascending maupun descending. Tapi tau ngga sih sebenernya data dengan format Y-m-d H:i:s ini kurang baik dijadikan untuk order by, alasannya adalah:
- Format yang tidak simple
Format Y-m-d H:i:s ini sangat tidak efisien, bayangkan saja kamu harus mengurut data 2019–08–01 12:12:12 dan 2018–01–01 12:12:13. Dibanding dengan format seperti itu pasti akan lebih mudah diurutkan dengan angka seperti 1,2,3,4. - Performa yang lambat
Data kamu masih dibawah 1000? Ya wajar sih masih cepet kalo disuruh order by created_at, ditambah yang akses jarang, ya si database bisa bekerja dengan seluruh jiwa raga-nya dia lah hehehe. Tapi bayangkan kalo database kamu rownya udah 400 ribu baris, disuruh ngurutin by created_at dengan format yang kurang baik dan yang ngakses ada banyak secara bersamaan, saya jamin sih bakalan lambat ketimbang pake integer.
Susah sih bayanginnya, coba aja buat Database 1 juta baris dan harus ber-relasi dengan table lain yang juga rownya nyaris 1 juta baris. Rasakan sendiri rasanya server kalian ngos ngosan hanya karena order by created_at ehehehe.
Diantara dua masalah tersebut, ada solusinya yaitu bermain dengan timestamp with miliseconds. Formatnya akan seperti ini
- 1549886783853 = 02/11/2019 19:06:23
- 1549890963235 = 02/11/2019 20:16:03
- 1552878646473 = 03/18/2019 10:10:46
Nah gimana? Format seperti ini lebih mesinisasi loh, sehingga mesin juga dapat lebih cepat membacanya ketimbang 03/18/2019 10:10:46 atau 2019–03–18 10:10:46, selain itu kamu juga bisa sih ngubah dengan format YmdHis jadinya 20190318101046, tapi ngga enak ya? enakan timestamp sih hehehe. Kenapa? Karena dengan timestamp kita bisa menggunakan berbagai library dengan mudah sehingga kita dapat ubah ke tanggal seharusnya.
Dengan mengubah format kamu dari format timestamp database menjadi timestamp miliseconds ini akan membuat process order by kamu di database menjadi lebih cepet gan!
Nah sekarang gimana caranya main dengan timestamp di PHP dan Javascript?
Untuk ngubah dari timestamp ke Carbon kita bisa main dengan format:
Carbon::createFromTimestamp($timestamp)->format('Y-m-d H:i:s)
Nah untuk ngubah Date ke timestamp di PHP kita bisa bermain dengan PHP native.
$date = Carbon::now()->format('Y-m-d H:i:s)
$ts = round(strtotime($val)*1000)
Nah kalo di Javascript kita akan menggunakan fungsi native Javascript
let ts = new Date().getTime()
atau kalo agan seneng pake Moment ya tinggal dipake aja hehe
let date = moment()
let ts = new Date(moment).getTime()
Nah cara ngubah dari Date ke Timestamp pake Moment adalah
let value = 1549890963235
let now = moment(value).format(“MM/DD/YYYY H:mm:ss”);//02/11/2019 20:16:03.235
Timestamp ini cocok untuk data yang sering digunakan untuk order by karena format panjang 13 huruf timestamp ini bisa di index di MySQL sehingga ketika di order By tentunya akan semakin cepat!
Format Timestamp ini juga cocok untuk data yang sering berubah misalnya ada kolom aktivitas_terakhir, selain itu dengan format timestamp, akan mempermudah para programmer frontend dalam mengolah data timestamp tersebut menjadi format tanggal ketimbang langsung tanggal loh, khususnya di Android!
Pasti ada yang bingung lah ngapain lagi diolah di frontend? Coba gan jangan ngegas dulu, pernah liat pesan “Few Seconds Ago” ? Yang kaya gini enaknya ngolah di Frontend karena ini bisa berubah setiap saat, Kasusnya adalah seseorang baru aja ngirim pesan maka pesan tersebut akan jadi Few Seconds Ago, lalu agan masih stay di halaman tsb selama satu menit, maka otomatis akan menjadi 1 minutes ago. Tapi kalo data tersebut dilempar berupa teks “Few Seconds Ago” dari Backend, apakah bisa diolah oleh Frontend? Think smart gan sebelum marahin saya ^^.
Semoga pagi ini insight yang saya berikan dapat menambah wawasan agan-agan semuanya ya ^^