Moment.js Nedir?

Moment.js, tarihleri ayrıştırmak, doğrulamak, manipüle etmek ve biçimlendirmek için yaygın olarak kullanılan bir JavaScript kütüphanesidir. Modern alternatifler ortaya çıkmadan önce, Moment.js, JavaScript uygulamalarında tarih işleme konusunda de‑facto standart haline gelmişti. Temiz, zincirlenebilir bir API sunarak tarihlerle çalışmayı sezgisel ve basit hâle getirir. date-fns ve Luxon gibi yeni kütüphaneler bulunmasına rağmen, Moment.js hâlâ eski kod tabanlarında yoğun şekilde kullanılmakta ve hata düzeltmeleri için aktif olarak bakım yapılmaktadır. Moment.js’i anlamak, ona bağımlı mevcut projeler üzerinde çalışan geliştiriciler için çok önemlidir.

Neden bir tarih manipülasyon kütüphanesi kullanılmalı?

JavaScript’in yerel Date nesnesi, kullanımı zor bir yapıya sahiptir. Tarayıcılar arasında tutarsız davranışlar gösterir, ay indekslemesi (0‑11 yerine 1‑12) kafa karıştırıcıdır, biçimlendirme seçenekleri sınırlıdır ve yerleşik saat dilimi desteği yoktur. Moment.js gibi tarih kütüphaneleri, tutarlı ve iyi belgelenmiş bir API sağlayarak bu sorunları çözer. Gün ışığı tasarrufu geçişleri, artık yıllar ve bölge‑spesifik biçimlendirme gibi kenar durumlarını otomatik olarak yönetir; böylece geliştiriciler hataya açık tarih mantığını sıfırdan yazmaktan kurtulur.

Araç açıklaması

Moment.js Playground, Moment.js kütüphanesiyle deney yapmanız için tarayıcı tabanlı etkileşimli bir ortam sunar. JavaScript kodunu doğrudan editörde yazarak Moment.js ve Moment Timezone’a tam erişim elde edersiniz. Playground, kodunuzu yazarken (debounce ile) otomatik olarak çalıştırır ve tüm konsol çıktısını alt tarafta terminal‑stili bir panelde gösterir. Moment.js’i öğrenmek, tarih biçimlendirme dizgilerini test etmek, tarih hesaplamalarını hata ayıklamak ve zaman‑ilişkili mantığı bir geliştirme ortamı kurmadan prototiplemek için mükemmeldir.

Örnekler

Geçerli tarihi biçimlendirme:

const now = moment();
console.log(now.format("MMMM Do, YYYY"));
// Çıktı: December 30th, 2025

console.log(now.format("dddd, h:mm A"));
// Çıktı: Monday, 3:45 PM

Farklı tarih biçimlerini ayrıştırma:

const date1 = moment("2025-12-25", "YYYY-MM-DD");
const date2 = moment("25/12/2025", "DD/MM/YYYY");
const date3 = moment("Dec 25, 2025", "MMM D, YYYY");

console.log(date1.format("dddd")); // Thursday
console.log(date2.isValid()); // true
console.log(date3.month()); // 11 (0‑indexed)

Göreceli zamanı hesaplama:

const past = moment().subtract(3, "days");
const future = moment().add(2, "weeks");

console.log(past.fromNow()); // 3 days ago
console.log(future.fromNow()); // in 14 days
console.log(past.from(future)); // 17 days ago

Tarih aritmetiği:

const date = moment("2025-01-15");

const nextMonth = date.clone().add(1, "month");
const lastWeek = date.clone().subtract(1, "week");
const endOfMonth = date.clone().endOf("month");

console.log(nextMonth.format("YYYY-MM-DD")); // 2025-02-15
console.log(lastWeek.format("YYYY-MM-DD")); // 2025-01-08
console.log(endOfMonth.format("YYYY-MM-DD")); // 2025-01-31

Sürelerle çalışma:

const start = moment("2025-01-01");
const end = moment("2025-12-31");

const duration = moment.duration(end.diff(start));

console.log(duration.asDays() + " days"); // 364 days
console.log(duration.asWeeks() + " weeks"); // 52 weeks
console.log(duration.humanize()); // a year

Tarih karşılaştırma:

const date1 = moment("2025-06-15");
const date2 = moment("2025-12-25");

console.log(date1.isBefore(date2)); // true
console.log(date1.isAfter(date2)); // false
console.log(date1.isSame(date2, "year")); // true
console.log(date1.isBetween("2025-01-01", "2025-08-01")); // true

Saat dilimleriyle çalışma:

const now = moment();

console.log(now.tz("America/New_York").format("h:mm A z"));
console.log(now.tz("Europe/London").format("h:mm A z"));
console.log(now.tz("Asia/Tokyo").format("h:mm A z"));

Özellikler

  • Tam Moment.js Kütüphanesi: Ayrıştırma, biçimlendirme, manipülasyon ve karşılaştırma dahil tüm Moment.js fonksiyonlarına erişim
  • Saat Dilimi Desteği: Moment Timezone, dünya çapındaki saat dilimleriyle çalışmak için önceden yüklenmiştir
  • Canlı Kod Çalıştırma: Kod, yazdıkça akıllı debounce ile otomatik olarak çalışır
  • Yerleşik Terminal: Tarayıcı geliştirici araçlarını açmadan konsol çıktısını anında görüntüler
  • Sözdizimi Vurgulama: JavaScript sözdizimi vurgulaması, kod okunabilirliğini artırır
  • Hata Yönetimi: Çalışma zamanı hataları terminal çıktısında net bir şekilde gösterilir

Kullanım Senaryoları

  • Moment.js Öğrenme: API ile deney yapın ve proje kurulumuna gerek kalmadan sonuçları anında görün
  • Biçim Dizesi Testi: İhtiyacınız olan tam tarih çıktısını elde etmek için farklı format token’larını deneyin
  • Tarih Hesaplama Hata Ayıklama: Uygulamanıza entegre etmeden önce karmaşık tarih aritmetiğini test edin
  • Saat Dilimi Dönüşümleri: Farklı saat dilimleri arasında zamanı hızlıca dönüştürün
  • Eski Kod Bakımı: Mevcut uygulamaları sürdürürken Moment.js kod parçacıklarını test edin

Yaygın Format Token’ları

Token Açıklama Örnek
YYYY 4‑haneli yıl 2025
YY 2‑haneli yıl 25
MM 2‑haneli ay 01‑12
MMM Kısa ay adı Jan, Feb
MMMM Tam ay adı January
DD 2‑haneli gün 01‑31
Do Sıra ekli gün 1st, 2nd, 3rd
dddd Tam hafta günü adı Monday
ddd Kısa hafta günü Mon
HH 24‑saat formatı 00‑23
hh 12‑saat formatı 01‑12
mm Dakika 00‑59
ss Saniye 00‑59
A AM/PM (büyük harf) AM, PM
a am/pm (küçük harf) am, pm
z Saat dilimi kısaltması EST, PST
Z Saat dilimi ofseti +05:00

Yaygın Metot Referansı

Metot Açıklama Örnek
moment() Şu anki anı oluşturur moment()
format(string) Dizeye biçimlendirir moment().format("YYYY-MM-DD")
add(n, unit) Zaman ekler moment().add(7, "days")
subtract(n, unit) Zaman çıkarır moment().subtract(1, "month")
startOf(unit) Birimin başlangıcı moment().startOf("week")
endOf(unit) Birimin sonu moment().endOf("month")
fromNow() Göreceli zaman moment("2025-01-01").fromNow()
diff(moment) Fark momentA.diff(momentB, "days")
isBefore(moment) Öncesinde mi momentA.isBefore(momentB)
isAfter(moment) Sonrasında mı momentA.isAfter(momentB)
isSame(moment, unit) Aynı mı momentA.isSame(momentB, "month")
isValid() Geçerlilik kontrolü moment("invalid").isValid()
clone() Kopya oluşturur moment().clone()
tz(zone) Saat dilimini dönüştürür moment().tz("America/New_York")

Zaman Birimleri

Moment.js, add, subtract, startOf, endOf ve diff işlemleri için aşağıdaki zaman birimlerini destekler:

  • years / y
  • quarters / Q
  • months / M
  • weeks / w
  • days / d
  • hours / h
  • minutes / m
  • seconds / s
  • milliseconds / ms