Manipulasi Tanggal Menggunakan day.js

17 Mei 2021

Moment.js adalah salah satu pustaka javascript yang populer digunakan untuk memanipulasi tanggal. Karena selain mudah digunakan, fiturnya pun cukup lengkap untuk berbagai macam operasi manipulasi tanggal.

Tetapi berdasarkan tulisan di sini, jika ingin memulai sebuah proyek, tim di balik moment.js menyarankan kita untuk menggunakan pustaka alternatif, selain moment.js. Berdasarkan artikel ini, ada beberapa hal yang jadi perhatian:

  1. Ukuran pustaka yang cukup besar, kurang-lebih 230 kb (66 kb, terkompresi gzip)
  2. Moment.js bersifat mutable yang berarti, operasi pada moment.js akan mengubah object aslinya, sehingga berpotensi untuk menghasilkan bug yang tidak diinginkan
  3. API berorientasi object yang kompleks.

Moment.js juga sudah menyatakan bahwa kedepannya mereka tidak akan menambahkan fitur-fitur baru, dan memutuskan untuk hanya melakukan pemeliharaan pada versi pembaruan berikutnya.

Maka, jika ingin memulai sebuah proyek baru, kita bisa mencoba day.js. Selain ukuran terkompresi gzip-nya hanya sebesar 2kb (jauh lebih kecil daripada moment.js), API day.js juga sangat identik dengan moment.js, sehingga proses migrasi bisa lebih mudah. Day.js juga bersifat immutable sehingga bisa meminimalisir terjadinya bug. Berikut adalah cara instalasi dan beberapa perbandingan cara penggunaan day.js dan moment.js.

Instalasi

Instalasi melalui npm bisa dilakukan dengan menggunakan perintah berikut:

$ npm install dayjs

Untuk penggunaan secara langsung pada browser, day.js juga bisa dipanggil langsung dengan cara seperti berikut:

<!-- CDN example (unpkg) -->
<script src="https://unpkg.com/dayjs@1.8.21/dayjs.min.js"></script>
<script>dayjs().format()</script>

Mengubah Format Tanggal

/// moment.js
const dateM1 = moment().format('D MMMM YYYY')
// 18 May 2021
const dateM2 = moment('2021-10-25').format('DD/MMM/YYYY')
// 25/Oct/2021

/// day.js
const dateD1 = dayjs().format('D MMMM YYYY')
// 18 May 2021
const dateD2 = dayjs('2021-10-25').format('DD/MMM/YYYY')
// 25/Oct/2021

Menambah atau Mengurangi Tanggal

/// moment.js
// lima hari dari sekarang (18 Mei 2021)
const fiveDaysM = moment().add(5, 'days').format('D MMMM YYYY')
// 23 May 2021

// tiga bulan yang lalu (18 Mei 2021)
const threeMonthsM = moment().subtract(3, 'months').format('D MMMM YYYY')
// 18 February 2021

/// day.js
// lima hari dari sekarang (18 Mei 2021)
const fiveDaysD = dayjs().add(5, 'days').format('D MMMM YYYY')
// 23 May 2021

// tiga bulan yang lalu (18 Mei 2021)
const threeMonthsD = dayjs().subtract(3, 'months').format('D MMMM YYYY')
// 18 February 2021

Menampilkan Waktu Relatif

Dayjs membutuhkan plugin RelativeTime untuk menampilkan waktu relatif. Silakan cek info plugin di sini.

/// moment.js
const relativeM1 = moment('2021-01-01').fromNow()
// 5 months ago
const relativeM2 = moment('2022-01-01').toNow()
// in 7 months 

/// day.js
const relativeTime = require('dayjs/plugin/relativeTime')
dayjs.extend(relativeTime)
const relativeD1 = dayjs('2021-01-01').fromNow()
// 5 months ago
const relativeD2 = dayjs('2022-01-01').toNow()
// in 7 months

Menampilkan Selisih Waktu

/// moment.js
const timeOneM = moment('2021-07-23')
const timeTwoM = moment('2021-02-01')

// selisih dalam milidetik
timeOneM.diff(timeTwoM)
// 14860800000

// selisih dalam hari
timeOneM.diff(timeTwoM, 'day')
// 172

// slisih dalam bulan
timeOneM.diff(timeTwoM, 'month')
// 5

/// day.js
const timeOneD = dayjs('2021-07-23')
const timeTwoD = dayjs('2021-02-01')

// selisih dalam milidetik
timeOneD.diff(timeTwoD)
// 14860800000

// selisih dalam hari
timeOneD.diff(timeTwoD, 'day')
// 172

// slisih dalam bulan
timeOneD.diff(timeTwoD, 'month')
// 5

Sebelum atau Sesudah

/// moment.js
// apakah tanggal yang sama
const isSameM = moment('2021-01-01').isSame('2021/01/01')
// true

// apakah tanggal pertama adalah sebelum tanggal kedua
const isBeforeM = moment('2022-01-01').isBefore('2021/01/01')
// false

// apakah tanggal pertama adalah sesudah tanggal kedua
const isAfterM = moment('2022-01-02').isAfter('2022-01-01')
// true

/// day.js
// apakah tanggal yang sama
const isSameD = dayjs('2021-01-01').isSame('2021/01/01')
// true

// apakah tanggal pertama adalah sebelum tanggal kedua
const isBeforeD = dayjs('2022-01-01').isBefore('2021/01/01')
// false

// apakah tanggal pertama adalah sesudah tanggal kedua
const isAfterD = dayjs('2022-01-02').isAfter('2022-01-01')
// true

Bisa kita lihat dari beberapa contoh di atas, API day.js relatif sama dengan moment.js, sehingga akan sangat memudahkan kita yang sudah familiar dengan moment.js untuk berpindah ke day.js di proyek baru. Selamat mencoba, semoga bermanfaat.

tag: , ,


Aldi Daswanto
Ditulis oleh Aldi Daswanto, full stack developer
Follow saya di Instagram, atau kontak saya via email di aldi[at]daswanto.com
© 2022, Dibuat menggunakan Gatsby