将日期转换为JS日期对象

时间:2016-09-02 13:41:18

标签: javascript date

我有一个奇怪的格式的日期,我不知道如何把它变成一个JS日期对象。我确信像moment.js这样的库有这方面的工具,但我真的不想为这个转换加载整个库。这是数据:

  

/日期(1472586116588-0400)/

编辑: 我已经更新了后端代码以使用JSON中的字符串而不是C#Date时间,然后我按如下方式转换DateTime:

Date.ToString("s");

这给了我这个字符串:2016-09-02T10:13:12

所以现在我的问题是如果我做var date = new Date(" 2016-09-02T10:13:12"); javascript回复:

Fri Sep 02 2016 06:13:12 GMT-0400(EDT)

但它应该给我:

Fri Sep 02 2016 10:13:12 GMT-0400(美国东部时间)

看来时区转换是加倍还是什么?任何人都知道如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

我假设这是从纪元以来的毫秒,有hhmm偏移,所以我会这样做:

var input = "/Date(1472586116588-0400)/";
var [match, msec, offset] = input.match(/\((\d+)([+-]\d+)\)/);
var offsetHours = Math.floor(offset / 100);
var offsetMinutes = offset - offsetHours * 100;
var date = new Date(msec - offsetHours * 60 * 60 * 1000 - offsetMinutes * 60 * 1000);

console.log(date);

答案 1 :(得分:0)

通过将后端数据更改为ISO 8601格式中的字符串而不是C#DateTime来修复,如下所示:

date.ToString( “O”);

然后可以使用新的Date({string here});

将其简单地转换为javascript日期

感谢James Thorpe建议在后端修复JSON数据,而不是将其破解为适合前端。