Bir Date nesnesinin JSON'a nasıl serileştirileceğini değiştirmek aslında mümkündür. Reviver fonksiyonu ile birleştirildiğinde, seri hale getirme üzerinde otomatik olarak çalışacak ve serileştirme işleminde kolaylıkla kullanılabilen iki yönlü bir çözüm oluşturulabilir.
Öncelikle bu gibi seri değiştirin:
> json = JSON.stringify({test:new Date()});
"{"test":"{timestamp}1380164268633"}"
Sonra bir oluşturabilirsiniz: Bu bir işaretleyici olarak bir önek ile UNIX zaman damgası içine Date nesnesinin temsil değişecek
Date.prototype.toJSON = function() { return "{timestamp}+" . this.getTime() }
Bu değerleri otomatik olarak filtreleyen yeniden canlandırma fonksiyonu:
function json_deserialize_helper(key,value) {
if (typeof value === 'string') {
var regexp;
regexp = /^{timestamp}(\d*)$/.exec(value);
if (regexp) {
return new Date(+regexp[1]);
}
}
return value;
}
(Credit : Bu kod temelde İlgili bir soru bu cevap kopyalanmıştır:
> JSON.parse(json, json_deserialize_helper);
Object {test: Thu Sep 26 2013 04:57:48 GMT+0200 (CEST)}
Yoksa seçebilirsiniz: https://stackoverflow.com/a/14509447/2572897) Bu kurulum ile Şimdi
, önce bizim sonucun seri kaldırma tekrar date nesnesinin neden olacaktır seri değiştirmek yerine standart seri hale getirme biçimi yakalamak için regexp'i kullanmamak:
function json_deserialize_helper(key,value) {
if (typeof value === 'string') {
var regexp;
regexp = /^\d\d\d\d-\d\d-\d\dT\d\d:\d\d:\d\d.\d\d\dZ$/.exec(value);
if (regexp) {
return new Date(value);
}
}
return value;
}
Örnek:
> json = JSON.stringify({test:new Date()})
"{"test":"2013-09-26T03:05:26.563Z"}"
> JSON.parse(json, json_deserialize_helper)
Object {test: Thu Sep 26 2013 05:05:26 GMT+0200 (CEST)}
Muhtemelen bu tarihleri localStorage'da depolamak için serileştiriyorsunuz. Bu durumda, bunun gibi bir agoniden ve benzer bir şekilde rhaboo gibi bir sarmalayıcı kitaplığı kullanarak önleyebilirsiniz. –