首页 > 解决方案 > 如何在 JavaScript 中的不同时区获取给定时间的本地时间

问题描述

我想在不同的时区获取给定时间的当地时间。我从 API获取时间 ( 6/12/2020 4:23:00 PM) 和时区 ( )。America/New_York如何使用这些值获取我的当地时间。

我找到了在不同时区获取时间的方法。

var aestTime = new Date().toLocaleString("en-US", {timeZone: "Australia/Brisbane"});
console.log('AEST time: '+ (new Date(aestTime)).toISOString())

但我需要反过来。

标签: javascripttimezone

解决方案


Luxon(Moment 的现代继任者)可以轻松做到这一点:

const input = '6/12/2020 4:23:00 PM';
const format = 'M/d/yyyy h:mm:ss a';
const zone = 'America/New_York';

const original = luxon.DateTime.fromFormat(input, format, { zone });
const local = original.toLocal();

console.log(local.toString()); // an ISO 8601 formatted string
console.log(local.toFormat(format)); // or whatever format you wish
<script src="https://cdnjs.cloudflare.com/ajax/libs/luxon/1.24.1/luxon.min.js"></script>

此外,要非常小心特定于区域设置的日期格式。我假设您的意思M/d/yyyy是在美国使用,但在澳大利亚他们使用d/M/yyyy. 将 6 月 12 日与 12 月 6 日混淆起来很容易。yyyy-MM-dd在使用 API 时,您应该更喜欢格式化。


推荐阅读