如何parsingJSON在JavaScript中接收Date对象?
我有以下一块JSON:
\/Date(1293034567877)\/ 
这是这个.NET代码的结果:
 var obj = DateTime.Now; var serializer = new System.Web.Script.Serialization.JavaScriptSerializer(); serializer.Serialize(obj).Dump(); 
现在我面临的问题是如何从JavaScript中创build一个Date对象。 所有我能find的是令人难以置信的正则expression式解决scheme(许多包含错误)。
很难相信没有优雅的解决scheme,因为这一切都在JavaScrip中,我的意思是JavaScript代码尝试阅读本应该是JavaScript代码的JSON(JavaScript对象表示法),现在事实certificate这不会导致JavaScript不能在这里做好工作。
我也看到了一些我无法工作的eval解决scheme(除了被指出为安全威胁之外)。
真的没有办法以优雅的方式做到这一点?
 类似的问题没有真正的答案: 
  如何parsing与GWT的ASP.NET JSONdate格式 
 没有标准的dateJSON表示。 你应该做什么@jAndybuild议,而不是序列化一个DateTime的; 只需发送一个RFC 1123的datestringToString("r")或者一个来自Unix时代的秒数,或者其他可以在JavaScript中使用的东西来构造Date 。 
JSON.parse函数接受一个可选的DateTime reviver函数。 你可以使用这样的function:
 dateTimeReviver = function (key, value) { var a; if (typeof value === 'string') { a = /\/Date\((\d*)\)\//.exec(value); if (a) { return new Date(+a[1]); } } return value; } 
然后打电话
 JSON.parse(somejsonstring,dateTimeReviver) 
而你的date会出来的权利
Roy Tinker的这个答案在这里 :
 var date = new Date(parseInt(jsonDate.substr(6))); 
正如他所说: substr函数取出“/ Date(”部分,parseInt函数获取整数,并在最后忽略“)/”。 生成的数字被传递给Date构造函数。
另一个select是在ASP端简单地格式化信息,以便JavaScript可以轻松读取它。 考虑为你的date做这个:
 DateTime.Now() 
哪个应该返回一个这样的格式:
 7/22/2008 12:11:04 PM 
 如果你把这个传递给一个如下所示的JavaScript Date构造函数: 
 var date = new Date('7/22/2008 12:11:04 PM'); 
 variablesdate现在保存这个值: 
 Tue Jul 22 2008 12:11:04 GMT-0700 (Pacific Daylight Time) 
 当然,您可以将此DateTime对象格式化为JS Date构造函数接受的任何types的string/ int。 
有什么问题:
 new Date(1293034567877); 
这对我来说“Wed Dec 22 2010 16:16:07 GMT + 0000(GMT标准时间)”。
或者你需要从JSON中获取数字吗?
如果您在JSON中使用JavaScript风格的ISO8601date,则可以从MDN中使用此date
 var jsonDate = (new Date()).toJSON(); var backToDate = new Date(jsonDate); console.log(jsonDate); //2015-10-26T07:46:36.611Z 
您可以在JavaScript中将JSONdate转换为正常的date格式。
 var date = new Date(parseInt(jsonDate.substr(6))); 
date总是一场噩梦。 回答你的老问题,也许这是最优雅的方式:
 eval(("new " + "/Date(1455418800000)/").replace(/\//g,"")) 
与eval我们将我们的string转换为JavaScript代码。 然后我们删除“/”,进入replace函数是一个正则expression式。 当我们开始新的话,我们的句子将会超越这个:
 new Date(1455418800000) 
现在,我很久以前开始使用的一件事就是用剔号表示长期的价值…为什么? 以及本地化,并停止在每个服务器或每个客户端如何configurationdate。 实际上,我也在数据库中使用它。
这个答案也许是相当晚了,但可以帮助任何人在这里。
我知道这是一个非常古老的线程,但我希望发布这个帮助那些碰到这个像我一样的人。
如果你不关心使用第三方脚本,你可以使用moment,js然后你可以使用.format()格式化它到任何你想要的。
  AngularJS无法parsing.NET JSONdate/Date(xxxxxxxxxxxxx)/string 
 我侧通过格式化date格式化它的ISO 8601string表示,而不是直接转储Date对象… 
这里是一个ASP.NET MVC代码示例
 return Json(new { date : DateTime.Now.ToString("O") //ISO 8601 Angular understands this format }); 
 我试过RFC 1123但它不工作.. Angular把它当作string而不是Date。 
 return Json(new { date : DateTime.Now.ToString("R") //RFC 1123 Angular won't parse this }); 
我没有使用.Net这样的事情。 如果你能得到它打印如下所示的东西,它应该工作。
请注意,除非通过其他方式parsing该JSON string ,或者只希望用户使用内置JSONparsing器的现代浏览器,则需要使用JS框架或JSON2将服务器输出的JSONstringparsing为真正的JSON目的。
 // JSON received from server is in string format var jsonString = '{"date":1251877601000}'; //use JSON2 or some JS library to parse the string var jsonObject = JSON.parse( jsonString ); //now you have your date! alert( new Date(jsonObject.date) ); 
维基链接
现代浏览器(如Firefox 3.5和Internet Explorer 8)包含用于parsingJSON的特殊function。 由于本地浏览器支持比eval()更高效,更安全,所以预计本地JSON支持将包含在下一个ECMAScript标准中[6]。
链接到JSON2文件
现场示例
 这个问题的答案是,使用nuget来获取JSON.NET,然后在你的JsonResult方法中使用这个: 
 JsonConvert.SerializeObject(/* JSON OBJECT TO SEND TO VIEW */); 
 在你的视图里简单的在javascript做这个: 
 JSON.parse(/* Converted JSON object */) 
如果是ajax调用:
 var request = $.ajax({ url: "@Url.Action("SomeAjaxAction", "SomeController")", dataType: "json"}); request.done(function (data, result) { var safe = JSON.parse(data); var date = new Date(safe.date); }); 
 一旦JSON.parse被调用,你可以把JSONdate放入一个new Date实例,因为JsonConvert创build一个合适的ISO时间实例 
正如Callum提到的,对我而言,最好的方法是将Controller方法更改为string,而不是JsonResult“。
 public string GetValues() { MyObject.DateFrom = DateTime.Now; return JsonConvert.SerializeObject(MyObject); } 
从ajax方法你可以做这样的事情
  $.ajax({ url: "/MyController/GetValues", type: "post", success: function (data) { var validData = JSON.parse(data); //if you are using datepicker and you want set a format $("#DateFrom").val($.datepicker.formatDate("dd/mm/yy", new Date(validData.DateFrom))); // if you want the date as returned $("#DateFrom").val(new Date(validData.DateFrom)) } }); 
使用eval函数工作只需要删除正面和反面的正斜杠。
 var date1 = "/Date(25200000)/" eval("new " + date1.substring(1, date1.length - 1)); 
产量Thu Jan 01 1970 00:00:00 GMT-0700(美国标准时间)
 // // formats a .net date into a javascript compatible date // function FormatJsonDate(jsonDt) { var MIN_DATE = -62135578800000; // const var date = new Date(parseInt(jsonDt.substr(6, jsonDt.length-8))); return date.toString() == new Date(MIN_DATE).toString() ? "" : (date.getMonth() + 1) + "\\" + date.getDate() + "\\" + date.getFullYear(); } 
 function parseJsonDate(jsonDate) { var fullDate = new Date(parseInt(jsonDate.substr(6))); var twoDigitMonth = (fullDate.getMonth() + 1) + ""; if (twoDigitMonth.length == 1) twoDigitMonth = "0" + twoDigitMonth; var twoDigitDate = fullDate.getDate() + ""; if (twoDigitDate.length == 1) twoDigitDate = "0" + twoDigitDate; var currentDate = twoDigitMonth + "/" + twoDigitDate + "/" + fullDate.getFullYear(); return currentDate; }; 
 function parseJsonDate(jsonDate) { var fullDate = new Date(parseInt(jsonDate.substr(6))); var twoDigitMonth = (fullDate.getMonth() + 1) + ""; if (twoDigitMonth.length == 1) twoDigitMonth = "0" + twoDigitMonth; var twoDigitDate = fullDate.getDate() + ""; if (twoDigitDate.length == 1) twoDigitDate = "0" + twoDigitDate; var currentDate = twoDigitMonth + "/" + twoDigitDate + "/" + fullDate.getFullYear(); return currentDate; }; 
//使用此function
 var Date=parseJsonDate("\/Date(1443812400000)\/"); alert(Date);