首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将ISO字符串转换为Date对象javascript (不带格式)到本地日期(

将ISO字符串转换为Date对象javascript (不带格式)到本地日期(
EN

Stack Overflow用户
提问于 2022-02-01 14:08:04
回答 2查看 139关注 0票数 0

我正在尝试将字符串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转换为保持相同日期、时间等的日期对象?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-02-02 10:05:05

时间戳"2022-02-01T13:36:57+00:00“代表了一个独特的时刻。如果解析到Date对象,它将创建一个时间值为1643722617000的日期实例,该值是从1970年1月1日的ECMAScript时代起的毫秒偏移量。

时间戳产生的时间值不受本地设置的影响,如下所示:

它符合ECMA-262所支持的格式之一,因此解析由standard

  • Contains (固定偏移量

)指定。

默认toString方法为主机系统时区中的等效日期和时间生成时间戳,通常称为本地日期和时间。它将为每个主机产生不同的日期和时间,具有不同的偏移量,但它们都代表着完全相同的时刻。

例如。

代码语言:javascript
复制
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}`)
)

如果您希望时间戳被解析为本地的(只有当您知道自己正在做什么并且有很好的理由这样做时才应该这样做),那么删除偏移量并解析其余的内容:

代码语言:javascript
复制
let timestamp = '2022-02-01T13:36:57+00:00';
let date = new Date(timestamp.substring(0,19));
console.log(date.toString());

请注意,对于每个具有不同偏移量的主机,生成的日期表示不同的时间时刻,并且每个这样的日期实例将具有不同的时间值。

票数 1
EN

Stack Overflow用户

发布于 2022-02-01 14:27:38

您可以实例化您自己的Intl.DateTimeFormat格式化程序,或者调用Date.prototype.toLocaleString()

代码语言:javascript
复制
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, '')}`);

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70941950

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档