【问题标题】:Formatting date to new date not working in IE将日期格式化为新日期在 IE 中不起作用
【发布时间】:2017-07-14 11:28:44
【问题描述】:

我目前有以下代码:

lastLoginDate = "\/Date(1499994230140+0800)\/";
lastLoginDate = moment(lastLoginDate).format("YYYY-MM-DD hh:mm:ss UTC");
lastLoginDate = new Date(lastLoginDate);

这适用于 chrome。但是,在 IE 中运行时,新日期返回无效日期。如何在 IE 中实现相同的输出?

【问题讨论】:

  • 你需要格式Tue Dec 05 16:47:20 CDT 2006 -- IE JavaScript date parsing error
  • "\/Date(1499994230140+0800)\/" 到底是什么?你是怎么做到的?
  • 由API返回
  • 什么 API?如果你有访问权限,你应该改变它,而不是试图以某种方式解析它。这种格式对我来说完全没有意义。

标签: javascript angularjs format momentjs utc


【解决方案1】:

通过将格式更改为 yyyy/mm/dd 而不是 yyyy-mm-dd 解决了我的问题

moment(lastLoginDate).format("YYYY/MM/DD hh:mm:ss UTC");

【讨论】:

  • 谢谢,它帮助了我
【解决方案2】:

根本不需要格式化然后再次解析日期。只需使用toDate()

lastLoginDate = moment(lastLoginDate).toDate();

如果这不起作用,那么您的lastLoginDate 格式错误。您可以阅读更多关于有效格式的信息here

【讨论】:

    【解决方案3】:

    您可以使用正则表达式将字符串拆分为 Unix 时间和时区偏移量。

    下面的代码很容易理解。

    const dateRegex = /^\/Date\((\d+)([-+]\d{4})\)\/$/;
    const dateFormat = 'YYYY-MM-DD hh:mm:ss Z';
      
    let lastLoginDate = "\/Date(1499994230140+0800)\/";
    console.log(parseTimestamp(lastLoginDate));
    
    function parseTimestamp(timestamp) { 
      var groups = dateRegex.exec(timestamp);
      var unixTime = Math.floor(parseInt(groups[1], 10) / 1000);
      var timezoneOffset = groups[2];
    
      return moment.unix(unixTime).utcOffset(timezoneOffset).format(dateFormat);
    }
    
    // Output: 2017-07-14 09:03:50 +08:00
    .as-console-wrapper { top: 0; max-height: 100% !important; }
    <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>

    【讨论】:

    • 如果letconst语句声明在IE中不起作用,您可以将其更改为var
    猜你喜欢
    • 1970-01-01
    • 2022-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-31
    • 2015-11-05
    相关资源
    最近更新 更多