Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var obj = {Date: new Date()};
- var objSer = JSON.stringify(obj);
- var objDeser = JSON.parse(objSer);
- var objJqDeser = $.parseJSON(objSer);
- function getYear(value){
- try{
- return value.getYear();
- }
- catch(err){
- return err;
- }
- }
- $("#orig").text("Orig Year: " + getYear(obj.Date));
- $("#deser").text("Deser Year: " + getYear(objDeser.Date));
- $("#jqDeser").text("JqDeser Year: " + getYear(objJqDeser.Date));
- // JSON date deserializer
- // use as the second, 'reviver' argument to JSON.parse();
- if (window.JSON && !window.JSON.dateParser) {
- var reISO = /^(d{4})-(d{2})-(d{2})T(d{2}):(d{2}):(d{2}(?:.d*))(?:Z|(+|-)([d|:]*))?$/;
- var reMsAjax = /^/Date((d|-|.*))[/|\]$/;
- JSON.dateParser = function (key, value) {
- // first, just make sure the property is a string:
- if (typeof value === 'string') {
- // then, use regex to see if it's an ISO-formatted string
- var a = reISO.exec(value);
- if (a) {
- // if so, Date() can parse it:
- return new Date(value);
- }
- // otherwise, see if it's a wacky Microsoft-format string:
- a = reMsAjax.exec(value);
- if (a) {
- // and perform some jujitsu to make use of it:
- var b = a[1].split(/[-+,.]/);
- return new Date(b[0] ? +b[0] : 0 - +b[1]);
- }
- // here, you could insert any additional tests and parse instructions you like, for other date syntaxes...
- }
- // important: you need to return any values you're not parsing, or they die...
- return value;
- };
- }
- // use: JSON.parse(json,JSON.dateParser);
- var jsonDates = {
- dtrx2: /d{4}-d{2}-d{2}/,
- parse: function(obj){
- var parsedObj = JSON.parse(obj);
- return this.parseDates(parsedObj);
- },
- parseDates: function(obj){
- // iterate properties
- for(pName in obj){
- // make sure the property is 'truthy'
- if (obj[pName]){
- var value = obj[pName];
- // determine if the property is an array
- if (Array.isArray(value)){
- for(var ii = 0; ii < value.length; ii++){
- this.parseDates(value[ii]);
- }
- }
- // determine if the property is an object
- else if (typeof(value) == "object"){
- this.parseDates(value);
- }
- // determine if the property is a string containing a date
- else if (typeof(value) == "string" && this.dtrx2.test(value)){
- // parse and replace
- obj[pName] = new Date(obj[pName]);
- }
- }
- }
- return obj;
- }
- };
- var curDate = new Date();
- document.write(curDate); //Mon Feb 01 2016 12:57:12 GMT-0600 (Central Standard Time)
- var dateStr = JSON.parse(JSON.stringify(curDate));
- document.write(dateStr);//2016-02-01T18:59:35.375Z
- var date = new Date(curDate);
- document.write(date); //Mon Feb 01 2016 12:59:35 GMT-0600 (Central Standard Time)
- String.prototype.getYear = function() {
- return Date.parse(this).getYear();
- };
- var obj = {date: new Date()};
- var dtObj = JSON.parse(JSON.stringify(obj));
- console.log(dtObj.date.getYear());
- var JSON_parse = JSON.parse;
- JSON.parse = function(str) {
- var res = JSON_parse(str);
- findAndConvertStringsToDates(res);
- return res;
- }
- (function() {
- var jsonParse = JSON.parse;
- var reDate = /^d{4}-d{2}-d{2}Td{2}:d{2}:d{2}.d{3}Z$/i;
- function jsonDate(obj) {
- var type = typeof(obj);
- if(type == 'object') {
- for(var p in obj)
- if(obj.hasOwnProperty(p))
- obj[p] = jsonDate(obj[p]);
- return obj;
- } else if(type == 'string' && reDate.test(obj)) {
- return new Date(obj);
- }
- return obj;
- }
- JSON.parse = function(str) { return jsonDate(jsonParse(str)); }
- })();
- /*
- * Tests
- */
- var dt = JSON.parse(JSON.stringify({date: new Date()}));
- console.log(typeof(dt.date));
- console.log(JSON.parse(JSON.stringify(null)));
- console.log(JSON.parse(JSON.stringify(123)));
- console.log(JSON.parse(JSON.stringify("test")));
- console.log(JSON.parse(JSON.stringify(new Date())));
- console.log(JSON.parse(JSON.stringify([1,new Date(),2])));
- console.log(JSON.parse(JSON.stringify({d: new Date(), d2: {d3: new Date(), d4: [0,new Date(),4]}})));
Add Comment
Please, Sign In to add comment