const date = new Date(); // Current date for all examples

// Create
const date = new Date();                    // Current date/time // (2024-12-25T14:30:45.123Z)
const date2 = new Date("2024-12-25");      // Specific date
const date3 = new Date(2024, 11, 25);      // Year, month(0-11), day
const date4 = new Date(1734567890123);     // From timestamp
const date5 = Date.now();                  // Current timestamp (number)

// Get Date Components (RETURNS NUMBER)
date.getFullYear();         // 2024
date.getMonth();            // 11 (0-11, December = 11)
date.getDate();             // 25 (day of month 1-31)
date.getDay();              // 3 (day of week 0-6, Sunday = 0)
date.getHours();            // 14 (0-23)
date.getMinutes();          // 30 (0-59)
date.getSeconds();          // 45 (0-59)
date.getMilliseconds();     // 123 (0-999)
date.getTime();             // 1734567890123 (timestamp)

// Set Date Components (MUTATES ORIGINAL)
date.setFullYear(2025);     // Sets year to 2025 - MUTATES
date.setMonth(0);           // Sets month to January - MUTATES
date.setDate(15);           // Sets day to 15th - MUTATES
date.setHours(10);          // Sets hour to 10 - MUTATES
date.setMinutes(30);        // Sets minutes to 30 - MUTATES
date.setSeconds(0);         // Sets seconds to 0 - MUTATES
date.setMilliseconds(0);    // Sets milliseconds to 0 - MUTATES
date.setTime(1734567890123); // Sets from timestamp - MUTATES

// Format to String (RETURNS STRING)
date.toString();            // "Wed Dec 25 2024 14:30:45 GMT+0500"
date.toDateString();        // "Wed Dec 25 2024"
date.toTimeString();        // "14:30:45 GMT+0500"
date.toISOString();         // "2024-12-25T09:30:45.123Z"

// Static Methods (RETURNS NUMBER OR DATE)
Date.now();                 // 1734567890123 (current timestamp)
Date.parse("2024-12-25");   // 1735084800000 (timestamp from string)

// Compare Dates (RETURNS BOOLEAN/NUMBER)
date1 > date2;              // true/false
date1.getTime() > date2.getTime(); // true/false
date1 - date2;              // Difference in milliseconds

// Locale Formatting (RETURNS STRING) 
date.toLocaleDateString("fr-MA", {
    year: 'numeric',
    month: 'long',
    day: 'numeric',
    weekday: 'long'
}); // "mercredi 25 décembre 2024"


// Common Patterns
new Date().toISOString().split('T')[0]; // "2024-12-25" (date only)
new Date(Date.now() + 86400000);       // Tomorrow
new Date().setHours(0,0,0,0);          // Start of today - MUTATES