function dateReviver(key, value) {
var a;
if (typeof value === 'string') {
//UTC
a = /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value);
if (a) {
return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4], +a[5], +a[6]));
}
//Unspecified
a = /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)$/.exec(value);
if (a) {
return new Date(+a[1], +a[2] - 1, +a[3], +a[4], +a[5], +a[6]);
}
//with Timezone
a = /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)([+-])(\d{2}):(\d{2})$/.exec(value);
if (a) {
var dir = a[7] == "+" ? -1 : 1;
return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4] + dir * a[8], +a[5] + dir * a[9], +a[6]));
}
}
return value;
}
console.log(JSON.parse('"2017-08-08T00:00:00Z"', dateReviver));
console.log(JSON.parse('"2017-08-08T08:00:00"', dateReviver));
console.log(JSON.parse('"2017-08-08T08:00:00+08:00"', dateReviver));