Reputation: 2986
Please don't make duplicate vs ASP.NET Parse DateTime result from ajax call to javascript date and Parsing DateTime format passed from Ajax to “dd/MM/yyyy”, I have been read carefully. But my question is differences.
I have data from asp.net load by ajax below.
Datetime in c#: "2019-05-04"
The result in ajax is: "/Date(1556895600000+0900)/"
You can see the result automatic add time UTC offset to DateTime, I don't know why.
How can I convert to DateTime in javascript vs data above?
var d = new Date(("/Date(1556895600000+0900)/").match(/\d+/)[0] * 1)
console.log(d)
You can see: Result "2019-05-03T15:00:00.000Z", But I expect result "2019-05-04". How can I do this?
Upvotes: 0
Views: 199
Reputation: 4224
Look I'm no dates expert but the following looks convincing to me
const parse = str => {
let [_, timestamp, offsetHours, offsetMinutes] = str.match(/(\d+)([+-]\d\d)(\d\d)/).map(Number);
let date = new Date(timestamp);
date.setHours(date.getHours() + offsetHours);
date.setMinutes(date.getMinutes() + offsetMinutes);
return date;
}
console.log(
parse("/Date(1556895600000+0900)/")
.toJSON()
)
console.log(
parse("/Date(1556895600000-0700)/")
.toJSON()
)
Here's a ES3 version in case it doesn't work in older browsers (as the OP said in the comments)
function parse(str) {
var matches = str.match(/(\d+)([+-]\d\d)(\d\d)/).map(Number);
var timestamp = matches[1];
var offsetHours = matches[2];
var offsetMinutes = matches[3];
var date = new Date(timestamp);
date.setHours(date.getHours() + offsetHours);
date.setMinutes(date.getMinutes() + offsetMinutes);
return date;
}
console.log(
parse("/Date(1556895600000+0900)/")
.toJSON()
)
console.log(
parse("/Date(1556895600000-0700)/")
.toJSON()
)
Upvotes: 2