在JavaScript中将日期转换为另一个时区,并使用正确的时区打印
我需要将本地时区转换为太平洋/洛杉矶 例如,如果用户在夏威夷 代码:取自此处 2021年3月14日星期日17:01:59 GMT-1000(夏威夷阿留申标准时间){} 它仍然打印夏威夷的决赛。我需要的是美国/洛杉矶的展览,不是夏威夷。(但是它仍然打印正确的新小时和分钟,只是显示标签不正确) 如何做到这一点 该解决方案也适用于其他时区,根据您的要求分别打印其其他时区,例如:美国/纽约、欧洲/伦敦、欧洲/巴黎等,在JavaScript中将日期转换为另一个时区,并使用正确的时区打印,javascript,typescript,timezone,Javascript,Typescript,Timezone,我需要将本地时区转换为太平洋/洛杉矶 例如,如果用户在夏威夷 代码:取自此处 2021年3月14日星期日17:01:59 GMT-1000(夏威夷阿留申标准时间){} 它仍然打印夏威夷的决赛。我需要的是美国/洛杉矶的展览,不是夏威夷。(但是它仍然打印正确的新小时和分钟,只是显示标签不正确) 如何做到这一点 该解决方案也适用于其他时区,根据您的要求分别打印其其他时区,例如:美国/纽约、欧洲/伦敦、欧洲/巴黎等, function convertTZ() { return new Date
function convertTZ() {
return new Date().toLocaleString('en-US', { timeZone: "America/Los_Angeles" });
}
console.log(convertTZ());
//Second way
//Hoepfully that's going to be the code that you need.You can change the way that you want to see the date.
function convertTZ() {
return new Date().toLocaleString('en-US', {
timeZone: "America/Los_Angeles" ,
day: "numeric",
month: "short",
year: "numeric",
hour: "numeric",
minute: "2-digit"
});
}
console.log(convertTZ(),' America/Los Angeles');
将有助于实现这一目标。以下几点:
- 您为
链接的答案中的方法存在缺陷。不应使用convertz
构造函数分析Date
的输出。请阅读回答后的评论toLocalString
对象无法转换为其他时区,因为它实际上不在任何时区中。Date
对象封装的唯一内容是它的Unix时间戳,可以通过Date
、.valueOf()
或任何将其强制为.getTime()
数字的机制来查看。此类值始终基于UTC
- 当您看到来自
对象的本地时间或时区时,系统的本地时区将应用于基于UTC的内部Unix时间戳以创建输出。本地时区不能从JavaScript(或TypeScript)以编程方式更改,也不能基于每个对象进行更改Date
- 不要试图将一个时区中的
对象转换为另一个时区中的Date
对象,而是要认识到所有Date
对象本质上都是UTC。因此,您可以创建一个位于不同时区的字符串(例如,使用Date
选项的timeZone
),但不能从该字符串创建新的toLocaleString
对象。如果您想要一个实际上可以设置为不同时区的对象,请考虑。如果您需要一个没有库的解决方案,有一天您将能够使用来自的,它最终将成为ECMAScript的一部分Date
- 当心调用
控制台。在
对象上记录日志。ECMAScript规范和WhatWG控制台规范都没有定义此类调用的行为。这是未定义的行为。在某些环境中,记录的字符串输出与调用日期
对象上的日期
相同-这将提供与.toString()
对象的时间戳相当的本地时间,以及本地时区的显示名。其他环境将显示调用日期
的相同输出,这将以UTC表示时间戳。不要记录.toISOString()
对象,而是自己调用这两个函数之一并记录输出Date
toLocaleString
在创建字符串时执行,但是new Date(…)
在解析该字符串时将使用本地时区的偏移量和DST规则。这就是为什么你不应该使用这种方法。这是我真正的目标问题,也许你可以帮忙,谢谢,
function convertTZ() {
return new Date().toLocaleString('en-US', { timeZone: "America/Los_Angeles" });
}
console.log(convertTZ());
//Second way
//Hoepfully that's going to be the code that you need.You can change the way that you want to see the date.
function convertTZ() {
return new Date().toLocaleString('en-US', {
timeZone: "America/Los_Angeles" ,
day: "numeric",
month: "short",
year: "numeric",
hour: "numeric",
minute: "2-digit"
});
}
console.log(convertTZ(),' America/Los Angeles');