JavaScript Date toLocaleDateString() Method

Beginner
⏱️ 9 min read
📚 Updated: Jul 2026
🎯 5 Examples
🚀 5 Try-it labs
Locale formatting

What You’ll Learn

toLocaleDateString() formats the date portion of a Date for human readers using locale rules. Pass a language tag and options to control weekday names, numeric vs long months, and preset styles—ideal for dashboards, birthdays, and international apps.

01

Syntax

locales, options

02

Date only

No time

03

Locales

en-US, de-DE

04

dateStyle

short/long

05

timeZone

IANA zones

06

Invalid

“Invalid Date”

Introduction

Machine formats like toISOString() are perfect for APIs, but users expect dates that match their language and region. toLocaleDateString() uses the Intl engine to produce readable calendar labels.

Unlike toDateString(), which always follows a fixed ddd mmm dd yyyy pattern, locale formatting adapts separators, order, and month names. For storage and JSON, still prefer toJSON() or ISO strings—use toLocaleDateString() at the presentation layer.

Understanding the toLocaleDateString() Method

Date.prototype.toLocaleDateString([locales[, options]]) returns a localized string for the calendar date of a Date instant:

  • Defaultdate.toLocaleDateString() uses the runtime’s default locale and short date style.
  • Locales — a BCP 47 tag ('en-US', 'fr-FR') or array of fallbacks.
  • Options — control fields like weekday, month, day, year, or preset dateStyle.
  • timeZone — optional IANA name (for example, 'America/New_York') to format the date as it appears in that zone.
💡
Beginner Tip

toLocaleDateString() never includes clock time. Need date and time? Use toLocaleString() instead. Need time only? Use toLocaleTimeString().

📝 Syntax

JavaScript
dateObj.toLocaleDateString([locales[, options]])

Parameters

  • locales (optional) — string or array of BCP 47 locale tags.
  • options (optional) — object with Intl date fields or dateStyle / timeZone.

Return value

  • A localized date string (no time component).
  • "Invalid Date" if the Date is invalid.

⚡ Quick Reference

GoalCode
Default locale datedate.toLocaleDateString()
US short datedate.toLocaleDateString('en-US')
Long weekday + monthdate.toLocaleDateString('en-US', { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' })
Preset styledate.toLocaleDateString('en-GB', { dateStyle: 'full' })
Date in a time zonedate.toLocaleDateString('en-US', { timeZone: 'UTC' })
API storage formatdate.toISOString()

📋 toLocaleDateString() vs Similar Methods

Use locale formatters for UI labels; use ISO/JSON for data exchange.

toLocaleDateString()
locale date

User-facing UI

toDateString()
fixed pattern

Quick debug

toISOString()
UTC ISO

APIs / storage

toLocaleString()
date + time

Full locale

Examples Gallery

Open DevTools Console (F12) or use Try-it links. Locale output may vary slightly by engine; examples use fixed dates for clarity.

📚 Getting Started

Format a fixed date with the runtime default locale.

Example 1 — Default toLocaleDateString()

March 15, 2026 formatted with your browser’s default locale rules.

JavaScript
const date = new Date(2026, 2, 15);
const label = date.toLocaleDateString();

console.log(label); // e.g. "3/15/2026" in en-US
Try It Yourself

How It Works

With no arguments, the engine picks short date formatting for the default locale. Same instant, different locales produce different separators and order.

📈 Practical Patterns

Long labels, multiple languages, preset styles, and time zones.

Example 2 — Long US Format with Options

Spell out weekday, month, and year for event pages or email headers.

JavaScript
const date = new Date(2026, 2, 15);

const longUS = date.toLocaleDateString('en-US', {
  weekday: 'long',
  year: 'numeric',
  month: 'long',
  day: 'numeric'
});

console.log(longUS); // "Sunday, March 15, 2026"
Try It Yourself

How It Works

Each option field controls one part of the label. Combine weekday, month, and day for readable headings without building strings manually.

Example 3 — Same Date in Multiple Locales

Show one meeting date the way participants in different regions expect.

JavaScript
const meeting = new Date(Date.UTC(2026, 2, 1));

const locales = ['en-US', 'fr-FR', 'de-DE', 'ja-JP'];

for (const locale of locales) {
  console.log(
    locale + ':',
    meeting.toLocaleDateString(locale, { dateStyle: 'long' })
  );
}
Try It Yourself

How It Works

The underlying instant is unchanged—only the presentation differs. Pass an array of locales as the first argument to provide fallbacks when a tag is unsupported.

Example 4 — Preset dateStyle Values

Use dateStyle instead of listing every field when you want standard short/medium/long/full layouts.

JavaScript
const birthday = new Date(1990, 4, 20);
const opts = { dateStyle: 'full' };

console.log(birthday.toLocaleDateString('en-US', opts));
// "Tuesday, May 20, 1990"

console.log(birthday.toLocaleDateString('en-US', { dateStyle: 'short' }));
// "5/20/90"
Try It Yourself

How It Works

dateStyle and explicit field options should not be mixed in the same call. Pick one approach per format.

Example 5 — Format the Calendar Date in a Specific timeZone

Near UTC midnight, the calendar date can differ by region—use timeZone to align with users.

JavaScript
// 2026-03-01 01:30 UTC
const instant = new Date(Date.UTC(2026, 2, 1, 1, 30, 0));

console.log(instant.toLocaleDateString('en-US', { timeZone: 'UTC' }));
// "3/1/2026"

console.log(instant.toLocaleDateString('en-US', { timeZone: 'America/Los_Angeles' }));
// "2/28/2026" — still Feb 28 in Pacific time
Try It Yourself

How It Works

timeZone shifts which local calendar day is displayed without changing the stored instant. For full date-and-time labels with zones, use toLocaleString() with the same option.

🚀 Common Use Cases

  • User profiles — show birthdays as May 20 in the visitor’s locale.
  • Dashboards — column headers and row labels with dateStyle: 'medium'.
  • Multilingual apps — switch locale tag when the user changes language.
  • Email templates — long weekday + month for event reminders.
  • Invoice dates — regional numeric formats without manual padding.
  • Fallback UX — try ['user-locale', 'en-US'] when a locale is unsupported.

🧠 How toLocaleDateString() Builds the Label

1

Resolve locale

Engine picks the BCP 47 tag from the argument or runtime default.

locale
2

Apply time zone

Local or timeZone option determines calendar fields.

TZ
3

Intl formatting

Options or dateStyle map to Intl date part rules.

Intl
4

Return string

A localized date label is returned; the Date object is unchanged.

📝 Notes

  • Date only—no hours, minutes, or seconds in the output.
  • Read-only: does not mutate the Date.
  • Output varies by locale and options; do not parse locale strings back to dates in production.
  • Store ISO or epoch values; format with toLocaleDateString() at display time.
  • Invalid dates return "Invalid Date"—unlike toISOString() which throws.
  • Do not pass time-only options like hour or minute—use toLocaleString() for those.

Browser & Runtime Support

Date.prototype.toLocaleDateString() with locales and options is widely supported via Intl. Modern browsers and Node.js handle it well.

Baseline · Intl

Date.prototype.toLocaleDateString()

Supported in Chrome, Firefox, Safari, Edge, and Node.js. Very old IE versions had limited locale support; use a polyfill or fixed formatters only if you must support them.

98% Universal API
Google Chrome Supported · Desktop & Mobile
Full support
Mozilla Firefox Supported · Desktop & Mobile
Full support
Apple Safari Supported · macOS & iOS
Full support
Microsoft Edge Supported · Chromium
Full support
Internet Explorer No native support · Use a polyfill
Polyfill
Opera Supported · Modern versions
Full support
Samsung Internet Supported · Android
Full support
Bun Supported · JavaScript runtime
Supported
Deno Supported · JavaScript runtime
Supported
Node.js Supported · Server runtime
Supported
Android WebView Supported · Modern WebView
Full support
Date.toLocaleDateString() Excellent

Bottom line: Safe for modern apps. Remember date-only scope, locale variance, and ISO for storage.

Conclusion

toLocaleDateString() turns Date instants into readable, locale-aware calendar labels for your UI. Combine language tags and options to match user expectations across regions.

Next, learn toLocaleString() when you need date and time together, or review toDateString() for a quick fixed-pattern local date.

💡 Best Practices

✅ Do

  • Format at display time from stored ISO or epoch values
  • Pass explicit locales when your app supports language switching
  • Use dateStyle for consistent preset layouts
  • Set timeZone when users work across regions
  • Provide locale fallbacks like ['fr-CA', 'fr-FR', 'en-US']

❌ Don’t

  • Store locale-formatted strings as your source of truth
  • Parse toLocaleDateString() output with regex
  • Use it when you need time—use toLocaleString()
  • Mix dateStyle with individual field options in one call
  • Send locale strings in API payloads instead of ISO

Key Takeaways

Knowledge Unlocked

Five things to remember about Date.toLocaleDateString()

Your foundation for locale-aware date labels in JavaScript.

5
Core concepts
📅 02

Date only

No time.

Scope
🌎 03

Locales

BCP 47 tags.

i18n
📋 04

dateStyle

short/full.

Presets
🌐 05

timeZone

IANA names.

Regions

❓ Frequently Asked Questions

A string with the date portion of the Date formatted for a locale — for example, "3/15/2026" in en-US or "15.03.2026" in de-DE. Time is not included.
No. It formats only the calendar date. For date and time together, use toLocaleString(). For time alone, use toLocaleTimeString().
Both show date without time. toDateString() uses a fixed engine format (ddd mmm dd yyyy). toLocaleDateString() follows Intl locale rules and accepts locale and options for flexible output.
Use a BCP 47 tag as the first argument: date.toLocaleDateString('en-US') or date.toLocaleDateString('fr-FR'). Omit it to use the runtime default locale.
Common options include weekday, year, month, day (each 'numeric' or 'long'), and dateStyle ('full', 'long', 'medium', 'short'). You can also set timeZone to format the date as it appears in a specific IANA zone.
It returns the string "Invalid Date" — the same as toDateString(). Validate with Number.isNaN(date.getTime()) before formatting in production UI.
Did you know?

You can pass an array of locales—date.toLocaleDateString(['es-MX', 'es-ES', 'en-US'])—and the engine uses the first supported tag. Handy for graceful i18n fallbacks.

Continue to toLocaleString()

Format both date and time with locale rules when you need a full timestamp label.

toLocaleString() tutorial →

About the author

Mari Selvan M P
Mari Selvan M P 🔗

Developer, cloud engineer, and technical writer

  • Experience 12 years building web and cloud systems
  • Focus Full Stack Development, AWS, and Developer Education

I write practical tutorials so students and working developers can learn by doing—from databases and APIs to deployment on AWS.

6 people found this page helpful