Date.prototype.toLocaleDateString()
toLocaleDateString()
方法是 Date
实例的方法,它返回一个字符串,其中包含此日期的日期部分在本地时区的语言敏感表示形式。在支持 Intl.DateTimeFormat
API 的实现中,此方法只需调用 Intl.DateTimeFormat
。
每次调用 toLocaleString
时,它都必须在一个大型本地化字符串数据库中进行搜索,这可能会降低效率。当多次使用相同的参数调用该方法时,最好创建一个 Intl.DateTimeFormat
对象并使用它的 format()
方法,因为 DateTimeFormat
对象会记住传递给它的参数,并可能决定缓存数据库的一部分,因此以后的 format
调用可以在更受约束的上下文中搜索本地化字符串。
试用
语法
toLocaleDateString()
toLocaleDateString(locales)
toLocaleDateString(locales, options)
参数
locales
和 options
参数自定义函数的行为,并允许应用程序指定应使用其格式约定进行格式化的语言。
在支持 Intl.DateTimeFormat
API 的实现中,这些参数与 Intl.DateTimeFormat()
构造函数的参数完全一致。不支持 Intl.DateTimeFormat
的实现被要求忽略这两个参数,这使得使用的语言环境和返回字符串的形式完全取决于实现。
locales
可选-
包含 BCP 47 语言标签的字符串,或包含此类字符串的数组。对应于
Intl.DateTimeFormat()
构造函数的locales
参数。在不支持
Intl.DateTimeFormat
的实现中,此参数将被忽略,通常使用主机的语言环境。 options
可选-
用于调整输出格式的对象。对应于
Intl.DateTimeFormat()
构造函数的options
参数。timeStyle
选项必须为 undefined,否则将抛出TypeError
。如果weekday
、year
、month
和day
都为 undefined,则year
、month
和day
将被设置为"numeric"
。在不支持
Intl.DateTimeFormat
的实现中,此参数将被忽略。
有关这些参数的详细信息以及如何使用这些参数,请参阅 Intl.DateTimeFormat()
构造函数。
返回值
一个字符串,表示给定日期的日期部分,按照语言特定的约定。
在支持 Intl.DateTimeFormat
的实现中,这等效于 new Intl.DateTimeFormat(locales, options).format(date)
,其中 options
已按上述方式标准化。
注意: 大多数情况下,toLocaleDateString()
返回的格式都是一致的。但是,即使在同一语言环境内,输出也可能因实现而异——输出变化是设计使然,并且符合规范。它也可能不是您期望的。例如,该字符串可能使用不间断空格,或者被双向控制字符包围。您不应将 toLocaleDateString()
的结果与硬编码常量进行比较。
示例
使用 toLocaleDateString()
此方法的基本用法不指定 locale
,它会在默认语言环境中返回格式化的字符串,并使用默认选项。
const date = new Date(Date.UTC(2012, 11, 12, 3, 0, 0));
// toLocaleDateString() without arguments depends on the implementation,
// the default locale, and the default time zone
console.log(date.toLocaleDateString());
// "12/11/2012" if run in en-US locale with time zone America/Los_Angeles
检查对语言环境和选项参数的支持
并非所有实现都支持 locales
和 options
参数,因为对国际化 API 的支持是可选的,并且一些系统可能没有必要的數據。对于不支持国际化的实现,toLocaleDateString()
始终使用系统的语言环境,这可能不是您想要的。因为任何支持 locales
和 options
参数的实现都必须支持 Intl
API,您可以检查后者的存在以查看是否支持。
function toLocaleDateStringSupportsLocales() {
return (
typeof Intl === "object" &&
!!Intl &&
typeof Intl.DateTimeFormat === "function"
);
}
使用语言环境
此示例展示了本地化日期格式的一些变化。为了获得应用程序用户界面中使用的语言的格式,请确保使用 locales
参数指定该语言(以及一些备用语言)。
const date = new Date(Date.UTC(2012, 11, 20, 3, 0, 0));
// formats below assume the local time zone of the locale;
// America/Los_Angeles for the US
// US English uses month-day-year order
console.log(date.toLocaleDateString("en-US"));
// "12/20/2012"
// British English uses day-month-year order
console.log(date.toLocaleDateString("en-GB"));
// "20/12/2012"
// Korean uses year-month-day order
console.log(date.toLocaleDateString("ko-KR"));
// "2012. 12. 20."
// Event for Persian, It's hard to manually convert date to Solar Hijri
console.log(date.toLocaleDateString("fa-IR"));
// "۱۳۹۱/۹/۳۰"
// Arabic in most Arabic speaking countries uses real Arabic digits
console.log(date.toLocaleDateString("ar-EG"));
// "٢٠/١٢/٢٠١٢"
// for Japanese, applications may want to use the Japanese calendar,
// where 2012 was the year 24 of the Heisei era
console.log(date.toLocaleDateString("ja-JP-u-ca-japanese"));
// "24/12/20"
// when requesting a language that may not be supported, such as
// Balinese, include a fallback language, in this case Indonesian
console.log(date.toLocaleDateString(["ban", "id"]));
// "20/12/2012"
使用选项
可以使用 options
参数自定义 toLocaleDateString()
提供的结果。
const date = new Date(Date.UTC(2012, 11, 20, 3, 0, 0));
// Request a weekday along with a long date
const options = {
weekday: "long",
year: "numeric",
month: "long",
day: "numeric",
};
console.log(date.toLocaleDateString("de-DE", options));
// "Donnerstag, 20. Dezember 2012"
// An application may want to use UTC and make that visible
options.timeZone = "UTC";
options.timeZoneName = "short";
console.log(date.toLocaleDateString("en-US", options));
// "Thursday, December 20, 2012, UTC"
规范
规范 |
---|
ECMAScript 语言规范 # sec-date.prototype.tolocaledatestring |
ECMAScript 国际化 API 规范 # sup-date.prototype.tolocaledatestring |
浏览器兼容性
BCD 表只在浏览器中加载