Τι είναι το Moment.js;

Το Moment.js είναι μια ευρέως χρησιμοποιούμενη βιβλιοθήκη JavaScript για ανάλυση, επικύρωση, χειρισμό και μορφοποίηση ημερομηνιών. Πριν εμφανιστούν σύγχρονες εναλλακτικές λύσεις, το Moment.js ήταν το πρότυπο για τον χειρισμό ημερομηνιών σε εφαρμογές JavaScript. Παρέχει ένα καθαρό, αλυσιδωτό API που κάνει τη δουλειά με ημερομηνίες διαισθητική και απλή. Ενώ υπάρχουν νεότερες βιβλιοθήκες όπως date-fns και Luxon, το Moment.js παραμένει ευρέως χρησιμοποιούμενο σε παλαιές βάσεις κώδικα και εξακολουθεί να συντηρείται ενεργά για διορθώσεις σφαλμάτων. Η κατανόηση του Moment.js είναι απαραίτητη για τους προγραμματιστές που εργάζονται με υπάρχοντα έργα που βασίζονται σε αυτό.

Γιατί να χρησιμοποιήσετε μια βιβλιοθήκη χειρισμού ημερομηνιών;

Το εγγενές αντικείμενο Date του JavaScript είναι περιδόξως δύσκολο στη χρήση. Έχει ασυνεπή συμπεριφορά σε διάφορα προγράμματα περιήγησης, συγκεχυμένη ευρετηρίαση μηνών (0-11 αντί 1-12), περιορισμένες επιλογές μορφοποίησης και καμία ενσωματωμένη υποστήριξη ζωνών ώρας. Οι βιβλιοθήκες ημερομηνιών όπως το Moment.js επιλύουν αυτά τα προβλήματα παρέχοντας ένα συνεπές, καλά τεκμηριωμένο API. Χειρίζονται αυτόματα περιπτώσεις ακμής όπως μεταβάσεις θερινής ώρας, δίσεκτα έτη και μορφοποίηση ειδική για τοπικές ρυθμίσεις, εξοικονομώντας στους προγραμματιστές τη συγγραφή επιρρεπούς σε σφάλματα λογικής ημερομηνιών από την αρχή.

Περιγραφή εργαλείου

Το Moment.js Playground είναι ένα διαδραστικό περιβάλλον που βασίζεται σε προγράμματα περιήγησης για πειραματισμό με τη βιβλιοθήκη Moment.js. Γράψτε και εκτελέστε κώδικα JavaScript απευθείας στο πρόγραμμα επεξεργασίας με πλήρη πρόσβαση στο Moment.js και Moment Timezone. Το playground εκτελεί αυτόματα τον κώδικά σας καθώς πληκτρολογείτε (με debouncing) και εμφανίζει όλη την έξοδο της κονσόλας σε ένα τερματικό παρόμοιο πάνελ παρακάτω. Είναι τέλειο για την εκμάθηση του Moment.js, τη δοκιμή συμβολοσειρών μορφοποίησης ημερομηνιών, τον εντοπισμό σφαλμάτων υπολογισμών ημερομηνιών και τον πρωτοτυπισμό λογικής που σχετίζεται με το χρόνο χωρίς να ρυθμίσετε ένα περιβάλλον ανάπτυξης.

Παραδείγματα

Μορφοποίηση της τρέχουσας ημερομηνίας:

const now = moment();
console.log(now.format("MMMM Do, YYYY"));
// Έξοδος: December 30th, 2025

console.log(now.format("dddd, h:mm A"));
// Έξοδος: Monday, 3:45 PM

Ανάλυση διαφορετικών μορφών ημερομηνιών:

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)

Υπολογισμός σχετικού χρόνου:

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

Αριθμητική ημερομηνιών:

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

Εργασία με διάρκειες:

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

Σύγκριση ημερομηνιών:

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

Εργασία με ζώνες ώρας:

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"));

Χαρακτηριστικά

  • Πλήρης Βιβλιοθήκη Moment.js: Πρόσβαση σε όλες τις συναρτήσεις Moment.js συμπεριλαμβανομένης της ανάλυσης, μορφοποίησης, χειρισμού και σύγκρισης
  • Υποστήριξη Ζωνών Ώρας: Το Moment Timezone είναι προ-φορτωμένο για εργασία με ζώνες ώρας σε όλο τον κόσμο
  • Εκτέλεση Ζωντανού Κώδικα: Ο κώδικας εκτελείται αυτόματα καθώς πληκτρολογείτε με έξυπνο debouncing
  • Ενσωματωμένο Τερματικό: Προβάλετε την έξοδο της κονσόλας αμέσως χωρίς να ανοίξετε τα εργαλεία ανάπτυξης του προγράμματος περιήγησης
  • Επισήμανση Σύνταξης: Επισήμανση σύνταξης JavaScript για καλύτερη αναγνωσιμότητα κώδικα
  • Χειρισμός Σφαλμάτων: Τα σφάλματα χρόνου εκτέλεσης εμφανίζονται ξεκάθαρα στην έξοδο του τερματικού

Περιπτώσεις χρήσης

  • Εκμάθηση Moment.js: Πειραματιστείτε με το API και δείτε αποτελέσματα αμέσως χωρίς ρύθμιση έργου
  • Δοκιμή Συμβολοσειράς Μορφοποίησης: Δοκιμάστε διαφορετικά tokens μορφοποίησης για να επιτύχετε την ακριβή έξοδο ημερομηνίας που χρειάζεστε
  • Εντοπισμός Σφαλμάτων Υπολογισμού Ημερομηνιών: Δοκιμάστε σύνθετη αριθμητική ημερομηνιών πριν την εφαρμογή στην εφαρμογή σας
  • Μετατροπές Ζωνών Ώρας: Γρήγορη μετατροπή ώρας μεταξύ διαφορετικών ζωνών ώρας
  • Συντήρηση Παλαιού Κώδικα: Δοκιμάστε αποσπάσματα κώδικα Moment.js κατά τη συντήρηση υπάρχουσων εφαρμογών

Κοινά Tokens Μορφοποίησης

Token Περιγραφή Παράδειγμα
YYYY Έτος 4 ψηφίων 2025
YY Έτος 2 ψηφίων 25
MM Μήνας 2 ψηφίων 01-12
MMM Σύντομο όνομα μήνα Jan, Feb
MMMM Πλήρες όνομα μήνα January
DD Ημέρα 2 ψηφίων 01-31
Do Ημέρα με κανονικό 1st, 2nd, 3rd
dddd Πλήρες όνομα ημέρας Monday
ddd Σύντομη ημέρα Mon
HH Ώρα 24 ωρών 00-23
hh Ώρα 12 ωρών 01-12
mm Λεπτά 00-59
ss Δευτερόλεπτα 00-59
A AM/PM (κεφαλαία) AM, PM
a am/pm (πεζά) am, pm
z Συντομογραφία ζώνης EST, PST
Z Μετατόπιση ζώνης +05:00

Αναφορά Κοινών Μεθόδων

Μέθοδος Περιγραφή Παράδειγμα
moment() Δημιουργία τρέχουσας στιγμής moment()
format(string) Μορφοποίηση σε συμβολοσειρά moment().format("YYYY-MM-DD")
add(n, unit) Προσθήκη χρόνου moment().add(7, "days")
subtract(n, unit) Αφαίρεση χρόνου moment().subtract(1, "month")
startOf(unit) Αρχή μονάδας moment().startOf("week")
endOf(unit) Τέλος μονάδας moment().endOf("month")
fromNow() Σχετικός χρόνος moment("2025-01-01").fromNow()
diff(moment) Διαφορά momentA.diff(momentB, "days")
isBefore(moment) Είναι πριν momentA.isBefore(momentB)
isAfter(moment) Είναι μετά momentA.isAfter(momentB)
isSame(moment, unit) Είναι ίδιο momentA.isSame(momentB, "month")
isValid() Έλεγχος εγκυρότητας moment("invalid").isValid()
clone() Δημιουργία αντιγράφου moment().clone()
tz(zone) Μετατροπή ζώνης moment().tz("America/New_York")

Μονάδες Χρόνου

Το Moment.js υποστηρίζει αυτές τις μονάδες χρόνου για τις λειτουργίες add, subtract, startOf, endOf και diff:

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