toLocaleTimeString()
接收两个参数,第一个是 locale,第二个是 options。locale 的作用是定义时间显示的语言、格式等,比如中文会显示为 "下午 13:00:00",如果是美国则会显示为 "13:00:00 PM",不同的 locale 有不同的时间表现形式。options 的作用则是规定时区,如果不填,则是系统默认的当前所在地区的时区,你可以通过 option 明确指定一个时区。
locale 可以是 string,也可以是 array。当是 array 时,这时候第二个 locale 会作为 fallback。下面这个例子,ban 表示 Balinese 这个语言,但是可能不支持,如果不支持,则转换为 Indonesian。
console.log(date.toLocaleTimeString(["ban", "id"]));
大陆地区的 locale:zh-CN。所有 locale。
options 是一个对象,除了可以定义时区,还可以定义时间格式等。
const options = { timeZone: "UTC", timeZoneName: "short" };
console.log(date.toLocaleTimeString("en-US", options));
console.log(
date.toLocaleTimeString([], { hour: "2-digit", minute: "2-digit" })
);
console.log(date.toLocaleTimeString("en-US", { hour12: false }));
中国的 timezone:Asia/Shanghai。momentjs 的 timezone。
更官方权威的 timezone 数据库来自 IANA 官网。
GitHub 开源项目同步了 INAN 的时区数据。
options 的所有选项。
是 options 中的 timeZone 决定转换到哪个时区的时间,locale 主要是日期和时间的格式,options 中除了 timeZone 其他也是控制格式。不是所有 implementation 都支持所有 option 选项,其中最关键的 timeZone 肯定支持 UTC 值,但可能不是 100% 支持 "Asia/Shanghai" 这种值,默认值是 runtime 的时区。
The time zone to use. The only value implementations must recognize is "UTC"; the default is the runtime's default time zone. Implementations may also recognize the time zone names of the IANA time zone database, such as "Asia/Shanghai", "Asia/Kolkata", "America/New_York".
下面这种写法,我测试过可以在 nodejs 12.16 正确运行。
const time = new Date().toLocaleTimeString("zh-CN", {
timeZone: "Asia/Shanghai",
hour12: false,
});
//在本地是 2022/03/23,在腾讯云函数是 03/23/2022
const date = new Date().toLocaleDateString("zh-CN", {
timeZone: "Asia/Shanghai",
day: "2-digit",
month: "2-digit",
year: "numeric",
});
console.log({ date, time });