【问题标题】:I want to Change Timezone of Date Object In JavaScript我想在 JavaScript 中更改日期对象的时区
【发布时间】:2021-11-18 11:43:58
【问题描述】:

我想更改 JavaScript 对象时区。我能够访问所需时区的时间 但日期对象仍然显示我的本地时区。

new Date()
output //Thu Nov 18 2021 16:30:23 GMT+0500 (Pakistan Standard Time)

new Date().toLocaleString("en-US", {timeZone: "America/Los_Angeles"})
output //'11/18/2021, 3:30:40 AM'

 new Date().toLocaleString("en-US", {timeZone: "America/Los_Angeles", timeZoneName: "short"})
output //'11/18/2021, 3:30:54 AM PST'

new Date(new Date().toLocaleString("en-US", {timeZone: "America/Los_Angeles", timeZoneName: "short"}))
output //Thu Nov 18 2021 16:37:35 GMT+0500 (Pakistan Standard Time)

【问题讨论】:

  • 日期对象不包含时区信息。它的一些方法格式到本地时区,但Date 本身只是将时间保存为UTC。你能解释一下你到底想做什么吗?您想显示不同时区的时间吗?还是将日期调整为不同的时间?还是有什么不同?

标签: javascript angular timestamp-with-timezone moment-timezone


【解决方案1】:

JavaScript Date 对象不支持设置时区,您可以做的最好的事情是在您的代码中使用Date.toLocaleString() 格式化日期和时间。

luxon 等专用日期/时间库do 非常简单地支持为DateTime 对象设置时区。

我建议使用其中一个库来获取另一个时区的日期,一个简单的示例如下所示(获取洛杉矶时区的日期时间):

const { DateTime } = luxon;

const localTime = DateTime.now();
const laTime = localTime.setZone("America/Los_Angeles")

console.log("Local Time:", localTime.toFormat('yyyy-MM-dd HH:mm'));
console.log("Los Angeles Time:", laTime.toFormat('yyyy-MM-dd HH:mm'));

console.log("Local Time (hour, minute):", localTime.hour, localTime.minute);
console.log("Los Angeles Time (hour, minute):", laTime.hour, laTime.minute);
.as-console-wrapper { max-height: 100% !important; top: 0; }
<script src="https://cdn.jsdelivr.net/npm/luxon@2.1.1/build/global/luxon.min.js"></script>

您可以尝试使用本机 Date 对象执行以下操作,但是,这确实是一种 hack,并且不会总是给出准确的结果:

function getDateInTimezone(date, timeZone) {
    // Using a locale of 'sv' formats as an ISO date, e.g. yyyy-MM-dd HH:mm.
    const timeInTimeZone = date.toLocaleString('sv', { timeZone } );
    // Pass this to the Date constructor
    return new Date(timeInTimeZone);
}

const localTime = new Date();
const timeZoneList = ['Asia/Karachi', 'Europe/Paris','America/Los_Angeles'];

console.log(`Local Time: ${localTime.toLocaleTimeString()}`);
for(let timeZone of timeZoneList) {
    const dt = getDateInTimezone(localTime, timeZone);
    console.log(`Time (${timeZone}): ${dt.toLocaleTimeString()}`);
}
.as-console-wrapper { max-height: 100% !important; top: 0; }

【讨论】:

  • 嘿特里,你能看看我在 AWS websockets 上问的一个问题吗?我相信拥有 10k+ 代表的用户可以查看已删除的问题,并且有一个与我类似的问题已被删除,我链接到在我的问题中。
  • 嘿@Spankied,我想我看不到那个...
  • 啊,好的,谢谢
猜你喜欢
  • 1970-01-01
  • 2020-04-02
  • 1970-01-01
  • 2020-10-09
  • 2015-01-29
  • 2019-11-18
  • 1970-01-01
  • 1970-01-01
  • 2015-12-22
相关资源
最近更新 更多