Temporal.PlainMonthDay.prototype.toLocaleString()
toLocaleString()
方法是 Temporal.PlainMonthDay
实例的一个方法,它返回一个代表该月-日的、符合语言习惯的字符串。在支持 Intl.DateTimeFormat
API 的实现中,此方法会委托给 Intl.DateTimeFormat
。
每次调用 toLocaleString
时,它都必须在一个庞大的本地化字符串数据库中进行搜索,这可能会效率低下。当该方法以相同的参数多次调用时,最好创建一个 Intl.DateTimeFormat
对象并使用其 format()
方法,因为 DateTimeFormat
对象会记住传递给它的参数,并可能决定缓存数据库的一部分,因此未来的 format
调用可以在更受限制的上下文中搜索本地化字符串。
语法
toLocaleString()
toLocaleString(locales)
toLocaleString(locales, options)
参数
locales
和 options
参数自定义函数行为,并允许应用程序指定应使用的语言的格式约定。
在支持 Intl.DateTimeFormat
API 的实现中,这些参数与 Intl.DateTimeFormat()
构造函数的参数完全对应。不支持 Intl.DateTimeFormat
的实现将返回与 toString()
完全相同的字符串,并忽略这两个参数。
locales
可选-
一个带有 BCP 47 语言标签 的字符串,或此类字符串的数组。对应于
Intl.DateTimeFormat()
构造函数的locales
参数。 options
可选-
一个调整输出格式的对象。对应于
Intl.DateTimeFormat()
构造函数的options
参数。calendar
选项必须提供与此月-日日历相同的值。关于 日期-时间组件选项 和样式快捷方式(dateStyle
和timeStyle
),选项应遵循以下形式之一:- 不提供任何选项:
month
和day
将默认为"numeric"
。 - 仅提供
dateStyle
:它会扩展为month
和day
的格式。 - 提供一些日期-时间组件选项,其中至少有一个是
month
或day
。输出中将仅包含指定的日期组件。
- 不提供任何选项:
有关这些参数及其使用方法的详细信息,请参阅 Intl.DateTimeFormat()
构造函数。
返回值
一个根据语言特定约定表示给定月-日的字符串。
在支持 Intl.DateTimeFormat
的实现中,这等同于 new Intl.DateTimeFormat(locales, options).format(monthDay)
,其中 options
已经如上所述进行了规范化。
注意: 大多数情况下,toLocaleString()
返回的格式是一致的。然而,输出在不同实现之间可能会有所不同,即使在相同的区域设置中也是如此——输出差异是设计使然,并受规范允许。它也可能不符合您的预期。例如,字符串可能使用不间断空格或被双向控制字符包围。您不应将 toLocaleString()
的结果与硬编码常量进行比较。
异常
RangeError
-
如果任何选项无效,则抛出。
TypeError
-
如果任何选项的类型不符合预期,则抛出。
示例
使用 toLocaleString()
不指定 locale
的此方法的简单用法以默认区域设置和默认选项返回格式化字符串。
// Note that just specifying "08-01" defaults to the ISO 8601 calendar,
// which throws an error if the locale's default calendar is not ISO 8601.
const md = Temporal.PlainMonthDay.from("2021-08-01[u-ca=gregory]");
console.log(md.toLocaleString()); // 8/1 (assuming en-US locale and Gregorian calendar)
如果月-日的日历与区域设置的默认日历不匹配,即使其日历是 iso8601
,也必须提供一个显式的 calendar
选项,并赋予相同的值。
const md = Temporal.PlainMonthDay.from("08-01");
md.toLocaleString("en-US", { calendar: "iso8601" }); // 08-01
使用带选项的 toLocaleString()
您可以通过提供 options
参数来自定义输出中包含的月-日的哪些部分。
const md = Temporal.PlainMonthDay.from("2021-08-01[u-ca=gregory]");
md.toLocaleString("en-US", { dateStyle: "full" }); // August 1
md.toLocaleString("en-US", { month: "long" }); // August
md.toLocaleString("en-US", { day: "numeric" }); // 1
规范
规范 |
---|
Temporal # sec-temporal.plainmonthday.prototype.tolocalestring |
浏览器兼容性
加载中…