0

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?

Heretic Monkey
  • 11,687
  • 7
  • 53
  • 122
Hong Van Vit
  • 2,884
  • 3
  • 18
  • 43

1 Answers1

2

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()
)
Devansh J
  • 4,006
  • 11
  • 23