【问题标题】:Convert ISO date string to Date Object without considering timezone将 ISO 日期字符串转换为日期对象而不考虑时区
【发布时间】:2017-07-18 05:23:00
【问题描述】:

目标:在不考虑时区的情况下将 ISO 日期字符串转换为日期对象

我有一个 ISO 字符串:2017-07-23T20:30:00.00Z。

我尝试使用以下方法将该字符串转换为日期:

new Date('2017-07-23T20:30:00.00Z')

 moment('2017-07-23T20:30:00.00Z').toDate()

 moment.utc('2017-07-23T20:30:00.00Z').toDate()

所有人都给出以下输出:Mon Jul 24 2017 02:00:00 GMT+0530 (India Standard Time)

这是不正确的。

您能告诉我如何获取字符串中的确切日期吗?

【问题讨论】:

  • '2017-07-23T20:30:00.00Z.'.substring(0,10); 获取日期。
  • @HassanImam——不是重复的。 OP 希望将日期视为本地日期,UTC 日期将与本地时区偏移期间每天的本地日期不同。在 +0530 时区,在当地时间上午 5:30 或从 UTC 时间下午 6:30 开始之前,它将是 UTC 术语中的“明天”。
  • @RobG 难道 OP 不想从他的原始 ISO 日期字符串中提取日期吗?甚至他的例子也指出了同样的问题。
  • @HassanImam—关于您的第一条评论,建议的副本使用时区。对于您的第二个,OP 想要将字符串转换为 Date 对象,您建议仅使用日期部分失败,因为 new Date('2017-07-23') 将(在大多数浏览器中)将字符串视为 UTC(所以回到 UTC 日期的原始问题与当地日期不符)。

标签: javascript date datetime momentjs


【解决方案1】:

只需删除末尾的“Z”字符即可解决问题。

执行以下操作将打印:

moment('2017-07-23T20:30:00.00').toDate();
// Sun Jul 23 2017 20:30:00 GMT+0300 (GTB Daylight Time)

虽然这是为我打印的:

moment('2017-07-23T20:30:00.00Z').toDate();
// Sun Jul 23 2017 23:30:00 GMT+0300 (GTB Daylight Time)

发生这种情况是因为在格式中使用“Z”字符不会导致时间被视为 UTC。它匹配时区说明符。

通过在括号中指定“Z”,您将匹配文字 Z,因此时区保留为当前的默认值,即本地时区。

【讨论】:

    【解决方案2】:

    您应该始终指定解析格式。在这种情况下,只需去掉“Z”:

    var s = '2017-07-23T20:30:00.00Z';
    var m = moment(s, 'YYYY-MM-DDTHH:mm:ss'); // <-- parse format without Z
    console.log(m.format())
    &lt;script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"&gt;&lt;/script&gt;

    【讨论】:

      【解决方案3】:

      试试这个

      var date = new Date('2017-07-23T20:30:00.00Z');
      console.log(date.getFullYear()+'/' + (date.getMonth()+1) +
       '/'+date.getDate());
      

      【讨论】:

      • 您为什么希望 UTC 日期与本地日期一致?
      猜你喜欢
      • 1970-01-01
      • 2019-02-27
      • 2020-05-21
      • 2020-11-30
      • 1970-01-01
      • 1970-01-01
      • 2019-03-15
      • 1970-01-01
      相关资源
      最近更新 更多