将日期格式化为在IE中不起作用的新日期

时间:2017-07-14 11:28:44

标签: javascript angularjs format momentjs utc

我目前有以下代码:

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

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

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

lastLoginDate = moment(lastLoginDate).toDate();

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

答案 2 :(得分:0)

您可以使用正则表达式将字符串拆分为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>