logo科技微讯

把时间转为为指定时区的当地时间

作者:科技微讯
日期:2021-04-14
📝 笔记

toLocaleTimeString

toLocaleTimeString() 接收两个参数,第一个是 locale,第二个是 options。locale 的作用是定义时间显示的语言、格式等,比如中文会显示为 "下午 13:00:00",如果是美国则会显示为 "13:00:00 PM",不同的 locale 有不同的时间表现形式。options 的作用则是规定时区,如果不填,则是系统默认的当前所在地区的时区,你可以通过 option 明确指定一个时区。

locale

locale 可以是 string,也可以是 array。当是 array 时,这时候第二个 locale 会作为 fallback。下面这个例子,ban 表示 Balinese 这个语言,但是可能不支持,如果不支持,则转换为 Indonesian。

console.log(date.toLocaleTimeString(["ban", "id"]));

大陆地区的 locale:zh-CN。所有 locale

options

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 });
donation赞赏
thumbsup0
thumbsdown0
暂无评论