Skip to content

JavaScript Date Formats

JavaScript provides a built-in Date object for working with dates and times. Understanding how to create and manipulate these objects is crucial for many web applications.

There are several ways to create a Date object:

  • Using new Date(): Creates a Date object with the current date and time.
  • Using new Date(milliseconds): Creates a Date object from milliseconds since the UNIX epoch (January 1, 1970, 00:00:00 UTC).
  • Using new Date(year, monthIndex, day, hours, minutes, seconds, milliseconds): The most reliable way to create a date for a specific local time. Note: monthIndex is 0-indexed (0 for January, 11 for December).
  • Using new Date(dateString): Creates a Date object by parsing a date string. This method can be unreliable for non-ISO 8601 formats.

Examples of creating Date objects:

const currentDate = new Date();
console.log(currentDate);
const epochDate = new Date(0);
console.log(epochDate); // Shows Thu Jan 01 1970 ...
const specificDate = new Date(2024, 0, 15, 10, 30, 0); // January 15, 2024, 10:30:00 AM (local time)
console.log(specificDate);

ISO 8601 is an international standard for representing dates and times. When parsing date strings with new Date(dateString), the ISO 8601 format is the most reliably parsed across JavaScript engines.

Common ISO 8601 formats:

  • Date only: YYYY-MM-DD (e.g., “2024-01-15”)
  • Year and Month: YYYY-MM (e.g., “2024-01”)
  • Year only: YYYY (e.g., “2024”)
  • Date and Time (UTC): YYYY-MM-DDTHH:mm:ssZ (e.g., “2024-01-15T10:30:00Z”)
  • Date and Time with offset: YYYY-MM-DDTHH:mm:ss+HH:mm or YYYY-MM-DDTHH:mm:ss-HH:mm (e.g., “2024-01-15T15:00:00+05:30”)
const isoDate = new Date("2024-01-15");
console.log(isoDate);
const isoDateTimeUTC = new Date("2024-01-15T10:30:00Z");
console.log(isoDateTimeUTC.toUTCString());

In the ISO 8601 format: ‘T’ is a literal character separating the date and time. ‘Z’ signifies UTC (Coordinated Universal Time). Timezone offsets like ‘+05:30’ or ‘-08:00’ can also be specified. UTC is the modern standard for time, effectively replacing GMT for most technical purposes.

Other Date String Formats (Use with Caution)

Section titled “Other Date String Formats (Use with Caution)”

While the Date constructor might attempt to parse other human-readable string formats, this behavior is often inconsistent across different browsers and JavaScript engines. It is strongly recommended to avoid relying on parsing non-ISO 8601 date strings for production applications.

Strings like “January 15 2024” or “15 Jan 2024” may be parsed, but their interpretation can vary.

// Example of a potentially parsable long date (behavior might vary)
const longDate = new Date("Jan 15 2024");
// console.log(longDate); // Check output carefully

Month names can be full (January) or abbreviated (Jan). Commas are often ignored, and names are usually case-insensitive, but relying on these specifics is risky.

Short Dates (e.g., “MM/DD/YYYY” or “DD/MM/YYYY”):

Section titled “Short Dates (e.g., “MM/DD/YYYY” or “DD/MM/YYYY”):”

Formats like “01/15/2024” are highly ambiguous. Depending on the locale and JavaScript engine, this could be interpreted as January 15th or (in some regions) as 1st of the 15th month (which is invalid). Avoid parsing these formats directly.

// Example of an ambiguous short date (AVOID for parsing)
// const shortDate = new Date("01/15/2024"); // Highly unreliable

Implementation-Specific Strings (e.g., Date.prototype.toString() output):

Section titled “Implementation-Specific Strings (e.g., Date.prototype.toString() output):”

The string format produced by myDate.toString() (e.g., “Mon Jan 15 2024 10:30:00 GMT+0100 (Central European Standard Time)”) is implementation-dependent and varies between browsers. It should not be used as an input format for creating new Date objects.

The Date object provides methods to get and set various components of a date:

  • getFullYear(), setFullYear(year, [month], [date])
  • getMonth() (0-11), setMonth(month, [date])
  • getDate() (1-31), setDate(date)
  • getHours(), setHours(hour, [min], [sec], [ms])
  • getMinutes(), setMinutes(min, [sec], [ms])
  • getSeconds(), setSeconds(sec, [ms])
  • getMilliseconds(), setMilliseconds(ms)
  • getTime() (milliseconds since epoch), setTime(milliseconds)
  • getDay() (day of the week, 0 for Sunday to 6 for Saturday)
const demoDate = new Date(2024, 0, 15); // Jan 15, 2024
console.log(demoDate.getFullYear()); // 2024
console.log(demoDate.getMonth()); // 0 (January)
demoDate.setDate(20);
console.log(demoDate.toDateString()); // Shows date with day 20

For displaying dates to users in a human-readable, locale-sensitive format, the Intl.DateTimeFormat object is the modern standard.

const displayDate = new Date(2024, 0, 15, 14, 0, 0);
const formatterUs = new Intl.DateTimeFormat('en-US', {
year: 'numeric', month: 'long', day: 'numeric',
hour: '2-digit', minute: '2-digit'
});
console.log(formatterUs.format(displayDate)); // e.g., "January 15, 2024, 02:00 PM"
const formatterGb = new Intl.DateTimeFormat('en-GB', {
dateStyle: 'medium', timeStyle: 'short'
});
console.log(formatterGb.format(displayDate)); // e.g., "15 Jan 2024, 14:00"

Refer to MDN Web Docs for Intl.DateTimeFormat for more options and locales.

To summarize best practices for handling dates in JavaScript:

  • Prefer creating dates with numerical components: new Date(year, monthIndex, ...) for maximum reliability.
  • When parsing strings, use ISO 8601 format: new Date('YYYY-MM-DDTHH:mm:ssZ').
  • Be aware of the 0-indexed month (0 for January).
  • Use Intl.DateTimeFormat for displaying dates to users.
  • For complex date manipulations, time zone handling, duration calculations, or parsing diverse formats robustly, consider using well-established date utility libraries. Popular choices include date-fns and Luxon. These libraries often provide a more intuitive and comprehensive API than the native Date object for advanced scenarios.

You can find these libraries on npm (Node Package Manager) and include them in your projects. For example, search for ‘date-fns library’ or ‘Luxon library’ for documentation and installation instructions.