menengahdatewaktuMenengah3 mnt baca

Date: Bekerja dengan Tanggal dan Waktu

Membuat dan memformat tanggal dengan object Date, plus perhitungan selisih waktu.

Waktu dalam program

Hampir semua aplikasi butuh tanggal: tanggal lahir, jadwal, timestamp transaksi. JavaScript menyediakannya lewat object Date.

Membuat Date

javascript
let sekarang = new Date();
console.log(sekarang); // tanggal dan waktu saat ini

let spesifik = new Date(2026, 9, 8); // 8 Oktober 2026
let dariString = new Date("2026-10-08"); // dari string ISO

Perhatikan: new Date(2026, 9, 8) memakai bulan 9 untuk Oktober. Ya, memang membingungkan, dan itu warisan yang harus dihafal.

Membaca komponen tanggal

javascript
let d = new Date(2026, 9, 8, 14, 30); // 8 Okt 2026, 14:30

console.log(d.getFullYear()); // 2026
console.log(d.getMonth());    // 9 (0 = Januari!)
console.log(d.getDate());     // 8, tanggal
console.log(d.getDay());      // 4, hari (0 = Minggu)
console.log(d.getHours());    // 14
console.log(d.getMinutes());  // 30

Untuk nama hari/bulan dalam bahasa Indonesia, buat array sendiri:

javascript
let namaHari = ["Minggu", "Senin", "Selasa", "Rabu", "Kamis", "Jumat", "Sabtu"];
console.log(namaHari[d.getDay()]); // "Kamis"

Timestamp dan selisih waktu

Date menyimpan waktu sebagai milidetik sejak 1 Januari 1970 (epoch). Ini memudahkan perhitungan selisih:

javascript
let mulai = new Date("2026-10-01");
let selesai = new Date("2026-10-08");
let selisihHari = (selesai - mulai) / (1000 * 60 * 60 * 24);
console.log(selisihHari); // 7

console.log(Date.now()); // timestamp saat ini, tanpa new

Mengurangi dua Date langsung menghasilkan selisih milidetik. Date.now() adalah cara cepat dapat timestamp untuk mengukur durasi eksekusi.

Catatan teknis: Bulan dimulai dari 0 (Januari = 0, Desember = 11) tapi tanggal dimulai dari 1. Ini inkonsistensi paling terkenal di Date. Selalu ingat saat membuat Date manual. Untuk parsing string tanggal, format ISO "2026-10-08" paling aman lintas browser.

Format tanggal Indonesia manual

Format bawaan Date kurang cocok untuk pengguna Indonesia. Buat formatter sendiri:

javascript
function formatID(date) {
  let hari = ["Minggu", "Senin", "Selasa", "Rabu", "Kamis", "Jumat", "Sabtu"];
  let bulan = ["Jan", "Feb", "Mar", "Apr", "Mei", "Jun",
               "Jul", "Agu", "Sep", "Okt", "Nov", "Des"];
  let d = date.getDate();
  return hari[date.getDay()] + ", " + d +
         " " + bulan[date.getMonth()] + " " + date.getFullYear();
}

console.log(formatID(new Date(2026, 9, 8))); // "Kamis, 8 Okt 2026"

Untuk angka tanggal, tidak perlu leading zero manual di contoh ini, tapi kalau butuh format 08, gunakan String(d).padStart(2, "0"). Formatter kecil seperti ini biasanya ditaruh di file util agar bisa dipakai di seluruh aplikasi.

Kesimpulan

Date cukup untuk kebutuhan umum: tampilkan tanggal, hitung selisih, simpan timestamp. Untuk aplikasi dengan logika tanggal kompleks (zona waktu, recurring event), pertimbangkan library seperti date-fns.