Date.prototype.toLocaleString()
Date
实例的 toLocaleString()
方法返回一个字符串,其中包含本地时区中该日期的语言敏感表示形式。在支持 Intl.DateTimeFormat
API 的实现中,此方法只需调用 Intl.DateTimeFormat
。
¥The toLocaleString()
method of Date
instances returns a string with a language-sensitive representation of this date in the local timezone. In implementations with Intl.DateTimeFormat
API support, this method simply calls Intl.DateTimeFormat
.
每次调用 toLocaleString
时,它都必须在本地化字符串的大型数据库中执行搜索,这可能效率低下。当使用相同的参数多次调用该方法时,最好创建一个 Intl.DateTimeFormat
对象并使用其 format()
方法,因为 DateTimeFormat
对象会记住传递给它的参数,并可能决定缓存数据库的一部分,因此将来的 format
调用可以在更受限的上下文中搜索本地化字符串。
¥Every time toLocaleString
is called, it has to perform a search in a big database of localization strings, which is potentially inefficient. When the method is called many times with the same arguments, it is better to create a Intl.DateTimeFormat
object and use its format()
method, because a DateTimeFormat
object remembers the arguments passed to it and may decide to cache a slice of the database, so future format
calls can search for localization strings within a more constrained context.
Try it
语法
参数
¥Parameters
locales
和 options
参数自定义函数的行为,并让应用指定应使用其格式约定的语言。
¥The locales
and options
parameters customize the behavior of the function and let applications specify the language whose formatting conventions should be used.
在支持 Intl.DateTimeFormat
API 的实现中,这些参数与 Intl.DateTimeFormat()
构造函数的参数完全对应。不支持 Intl.DateTimeFormat
的实现会被要求忽略这两个参数,从而使所使用的区域设置和返回的字符串形式完全依赖于实现。
¥In implementations that support the Intl.DateTimeFormat
API, these parameters correspond exactly to the Intl.DateTimeFormat()
constructor's parameters. Implementations without Intl.DateTimeFormat
support are asked to ignore both parameters, making the locale used and the form of the string returned entirely implementation-dependent.
locales
Optional-
带有 BCP 47 语言标记的字符串,或此类字符串的数组。对应于
Intl.DateTimeFormat()
构造函数的locales
参数。在不支持
Intl.DateTimeFormat
的实现中,该参数被忽略,通常使用主机的区域设置。 options
Optional-
调整输出格式的对象。对应于
Intl.DateTimeFormat()
构造函数的options
参数。如果weekday
、year
、month
、day
、dayPeriod
、hour
、minute
、second
和fractionalSecondDigits
均未定义,则year
、month
、day
、hour
、minute
、second
将设置为"numeric"
。在不支持
Intl.DateTimeFormat
的实现中,该参数被忽略。
有关这些参数及其使用方法的详细信息,请参阅 Intl.DateTimeFormat()
constructor。
¥See the Intl.DateTimeFormat()
constructor for details on these parameters and how to use them.
返回值
¥Return value
根据特定于语言的约定表示给定日期的字符串。
¥A string representing the given date according to language-specific conventions.
在 Intl.DateTimeFormat
的实现中,这相当于 new Intl.DateTimeFormat(locales, options).format(date)
。
¥In implementations with Intl.DateTimeFormat
, this is equivalent to new Intl.DateTimeFormat(locales, options).format(date)
.
注意:大多数时候,
toLocaleString()
返回的格式是一致的。但是,即使在同一语言环境中,输出也可能因实现而异 - 输出变化是设计使然,并且规范允许。它也可能不是你所期望的。例如,字符串可以使用不间断空格或被双向控制字符包围。你不应该将toLocaleString()
的结果与硬编码常量进行比较。¥Note: Most of the time, the formatting returned by
toLocaleString()
is consistent. However, the output may vary between implementations, even within the same locale — output variations are by design and allowed by the specification. It may also not be what you expect. For example, the string may use non-breaking spaces or be surrounded by bidirectional control characters. You should not compare the results oftoLocaleString()
to hardcoded constants.
示例
使用 toLocaleString()
¥Using toLocaleString()
不指定 locale
的情况下使用此方法的基本用途会返回默认区域设置和默认选项的格式化字符串。
¥Basic use of this method without specifying a locale
returns a formatted string in the default locale and with default options.
const date = new Date(Date.UTC(2012, 11, 12, 3, 0, 0));
// toLocaleString() without arguments depends on the
// implementation, the default locale, and the default time zone
console.log(date.toLocaleString());
// "12/11/2012, 7:00:00 PM" if run in en-US locale with time zone America/Los_Angeles
检查对区域设置和选项参数的支持
¥Checking for support for locales and options parameters
locales
和 options
参数可能并非在所有实现中都受支持,因为对国际化 API 的支持是可选的,并且某些系统可能没有必要的数据。对于没有国际化支持的实现,toLocaleString()
始终使用系统的区域设置,这可能不是你想要的。因为任何支持 locales
和 options
参数的实现都必须支持 Intl
API,因此你可以检查后者是否存在以获取支持:
¥The locales
and options
parameters may not be supported in all implementations, because support for the internationalization API is optional, and some systems may not have the necessary data. For implementations without internationalization support, toLocaleString()
always uses the system's locale, which may not be what you want. Because any implementation that supports the locales
and options
parameters must support the Intl
API, you can check the existence of the latter for support:
function toLocaleStringSupportsLocales() {
return (
typeof Intl === "object" &&
!!Intl &&
typeof Intl.DateTimeFormat === "function"
);
}
使用语言环境
¥Using locales
此示例显示本地化日期和时间格式的一些变化。为了获取应用用户界面中使用的语言的格式,请确保使用 locales
参数指定该语言(可能还有一些后备语言):
¥This example shows some of the variations in localized date and time formats. In order to get the format of the language used in the user interface of your application, make sure to specify that language (and possibly some fallback languages) using the locales
argument:
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 and 12-hour time with AM/PM
console.log(date.toLocaleString("en-US"));
// "12/19/2012, 7:00:00 PM"
// British English uses day-month-year order and 24-hour time without AM/PM
console.log(date.toLocaleString("en-GB"));
// "20/12/2012 03:00:00"
// Korean uses year-month-day order and 12-hour time with AM/PM
console.log(date.toLocaleString("ko-KR"));
// "2012. 12. 20. 오후 12:00:00"
// Arabic in most Arabic-speaking countries uses Eastern Arabic numerals
console.log(date.toLocaleString("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.toLocaleString("ja-JP-u-ca-japanese"));
// "24/12/20 12:00:00"
// When requesting a language that may not be supported, such as
// Balinese, include a fallback language (in this case, Indonesian)
console.log(date.toLocaleString(["ban", "id"]));
// "20/12/2012 11.00.00"
使用选项
¥Using options
可以使用 options
参数自定义 toLocaleString()
提供的结果:
¥The results provided by toLocaleString()
can be customized using the options
parameter:
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.toLocaleString("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.toLocaleString("en-US", options));
// "Thursday, December 20, 2012, GMT"
// Sometimes even the US needs 24-hour time
console.log(date.toLocaleString("en-US", { hour12: false }));
// "12/19/2012, 19:00:00"
规范
Specification |
---|
ECMAScript Language Specification # sec-date.prototype.tolocalestring |
ECMAScript Internationalization API Specification # sup-date.prototype.tolocalestring |
浏览器兼容性
BCD tables only load in the browser