Json library parses and writes DateTime and DateTimeOffset values according to the ISO 8601-1:2019 extended profile.
To represent dates in JavaScript, JSON uses ISO 8601 string format to encode dates as a string. Dates are encoded as ISO 8601 strings and then treated just like a regular string when the JSON is serialized and deserialized.
Use the JavaScript function JSON. parse() to convert text into a JavaScript object: const obj = JSON. parse('{"name":"John", "age":30, "city":"New York"}');
parse() The JSON. parse() method parses a JSON string, constructing the JavaScript value or object described by the string. An optional reviver function can be provided to perform a transformation on the resulting object before it is returned.
The JSON.parse
function accepts an optional DateTime reviver function. You can use a function like this:
dateTimeReviver = function (key, value) {
var a;
if (typeof value === 'string') {
a = /\/Date\((\d*)\)\//.exec(value);
if (a) {
return new Date(+a[1]);
}
}
return value;
}
Then call
JSON.parse(somejsonstring, dateTimeReviver);
And your dates will come out right.
There is no standard JSON representation of dates. You should do what @jAndy suggested and not serialize a DateTime
at all; just send an RFC 1123 date string ToString("r")
or a seconds-from-Unix-epoch number, or something else that you can use in the JavaScript to construct a Date
.
This answer from Roy Tinker here:
var date = new Date(parseInt(jsonDate.substr(6)));
As he says: The substr function takes out the "/Date(" part, and the parseInt function gets the integer and ignores the ")/" at the end. The resulting number is passed into the Date constructor.
Another option is to simply format your information properly on the ASP side such that JavaScript can easily read it. Consider doing this for your dates:
DateTime.Now()
Which should return a format like this:
7/22/2008 12:11:04 PM
If you pass this into a JavaScript Date
constructor like this:
var date = new Date('7/22/2008 12:11:04 PM');
The variable date
now holds this value:
Tue Jul 22 2008 12:11:04 GMT-0700 (Pacific Daylight Time)
Naturally, you can format this DateTime
object into whatever sort of string/int the JS Date
constructor accepts.
If you use the JavaScript style ISO-8601 date in JSON, you could use this, from MDN:
const jsonDate = (new Date()).toJSON();
const backToDate = new Date(jsonDate);
console.log(jsonDate); //2015-10-26T07:46:36.611Z
To create an ISO-8601 date string:
myDate.toISOString()
You can convert JSON Date to normal date format in JavaScript.
var date = new Date(parseInt(jsonDate.substr(6)));
What's wrong with:
new Date(1293034567877);
This returns for me "Wed Dec 22 2010 16:16:07 GMT+0000 (GMT Standard Time)".
Or do you need to get the number out the json?
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With