我正在尝试将字符串2022-02-01T13:36:57+00:00转换为日期对象javascript,该对象在不考虑时区的情况下返回Tue Feb 01 2022 13:36:57。
但是每次我尝试转换它返回的日期:Tue Feb 01 2022 10:36:57 GMT-0300 (Brasilia Standard Time)
我已经尝试过了:let now = moment("2022-02-01T13:36:57+00:00").toDate();
日期:let now = new Date("2022-02-01T13:36:57+00:00");
也使用UTC:new Date(Date.UTC(2022, 02, 01, 10, 36, 57))
但是他们都给了我当地的日期(巴西利亚标准时间)
因此,问题是:
如何将此字符串2022-02-01T13:36:57+00:00转换为保持相同日期、时间等的日期对象?
发布于 2022-02-02 10:05:05
时间戳"2022-02-01T13:36:57+00:00“代表了一个独特的时刻。如果解析到Date对象,它将创建一个时间值为1643722617000的日期实例,该值是从1970年1月1日的ECMAScript时代起的毫秒偏移量。
时间戳产生的时间值不受本地设置的影响,如下所示:
它符合ECMA-262所支持的格式之一,因此解析由standard
)指定。
默认toString方法为主机系统时区中的等效日期和时间生成时间戳,通常称为本地日期和时间。它将为每个主机产生不同的日期和时间,具有不同的偏移量,但它们都代表着完全相同的时刻。
例如。
let timestamp = '2022-02-01T13:36:57+00:00';
let date = new Date(timestamp);
['UTC','America/Sao_Paulo','Asia/Kolkata'].forEach(
loc => console.log(`${date.toLocaleString('default',{timeZone:loc})} - ${loc}`)
)
如果您希望时间戳被解析为本地的(只有当您知道自己正在做什么并且有很好的理由这样做时才应该这样做),那么删除偏移量并解析其余的内容:
let timestamp = '2022-02-01T13:36:57+00:00';
let date = new Date(timestamp.substring(0,19));
console.log(date.toString());
请注意,对于每个具有不同偏移量的主机,生成的日期表示不同的时间时刻,并且每个这样的日期实例将具有不同的时间值。
发布于 2022-02-01 14:27:38
您可以实例化您自己的Intl.DateTimeFormat格式化程序,或者调用Date.prototype.toLocaleString()。
const
dateString = '2022-02-01T13:36:57+00:00',
date = new Date(dateString),
dateFormatter = new Intl.DateTimeFormat('en-US', {
timeZone: 'UTC',
weekday: 'short',
year: 'numeric',
month: 'short',
day: '2-digit',
hour: '2-digit',
minute: '2-digit',
second: '2-digit',
timeZoneName: 'long',
hour12: false
});
console.log(`Local date : ${date}`);
console.log(` UTC date : ${dateFormatter.format(date).replace(/,/g, '')}`);
https://stackoverflow.com/questions/70941950
复制相似问题