在asp.net中的DateTime JavaScript序列化不给一个JavaScriptdate对象?

当我在.Net中parsing一个DateTime到json时,它返回一个string(即"\/Date(1249335194272)\/" )。 我如何使它返回一个js Date对象构造函数不包裹在一个string?

 // js server code var dteNow = <%= jsonDateNow %>; // js rendered code var dteNow = "\/Date(1249335477787)\/"; // C# using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.Script.Serialization; using System.Web.UI.WebControls; namespace testing{ public partial class iTaxPrep : System.Web.UI.Page { protected string jsonDateNow; protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { jsonDateNow = new JavaScriptSerializer().Serialize(DateTime.Now); } } } } 

这是JSON的一个已知限制 。 这个答案可能会帮助你,具体来说:

 value = new Date(parseInt(value.replace("/Date(", "").replace(")/",""), 10)); 

这似乎工作(感谢克里斯S的想法)。 在C#中做一个replace,从date对象周围删除string包装;

  using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.Script.Serialization; using System.Web.Script.Services; using System.Web.Services; using System.Web.UI.WebControls; namespace test { [ScriptService] public partial class testing: System.Web.UI.Page { protected string strCaseID; protected string jsonCase; protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { strCaseID =Tools.GetQueryObject("id"); // get a complex object with dates, string, arrays etc. jsonESHACase = new JavaScriptSerializer().Serialize(objCase.Get(strCaseID )) .Replace("\"\\/Date(", "new Date(").Replace(")\\/\"", ")"); } } } } 

删除引号后,添加新的前缀到date这个js现在工作。 万岁!

 testCase= <%= jsonESHACase %>; if (testCase) { document.write(testCase["ClosingDate"].format("MM dd yyyy")); } 

简单的JavaScript操作是这样的:

 function(param){ var date = new Date(parseInt(param.substr(6))); return date; } 

将JSONdate作为parameter passing给函数,并返回一个javascriptdate。

用一个小string操作和一个评估,你可以创build一个Date对象

 var dteNow = "\/Date(1249335477787)\/"; var dteObj = eval("new " + dteNow.replace(/\//g,"")); 

你可以试试这个:

 "MyField: " + string.Format("(function(y,m,d,h,mm,s){{var d=new Date(Date.UTC(y,m-1,d,h,mm,s));return d;}})({0},{1},{2},{3},{4},{5})", d.Year, d.Month, d.Day, d.Hour, d.Minute, d.Second); 

这似乎在FF和IE中工作。

我发现这是处理这个问题的有用技巧:

http://icanmakethiswork.blogspot.co.uk/2012/04/beg-steal-or-borrow-decent-javascript.html

它允许将DateTimes序列化为可与JavaScript Date构造函数一起使用的ISO 8601datestring,并具有人类可读的奖励。

 jsonDateNow = String.Format("Date({0},{1},{2})", Date().Now.getYear(), Date().Now.getMonth() -1, Date().Now.getDay()); 

这里有一个使用Date.parse和DateTime.ToString的选项:

 var lowerBound = new Date(Date.parse("@Model.LowerBound.ToString("MMMM dd, yyyy")")); 

如果您需要时间,请考虑以下事项。 我相信这依赖于一个新的JavaScript规范:

 var lowerBound = new Date(Date.parse("@Model.LowerBound.ToUniversalTime().ToString("s")")); 

这里有一个使用jQuery的选项:(我敢肯定有一种方法可以在这里添加时间)

 var lowerBound = $.datepicker.parseDate('yy-mm-dd', "@Model.LowerBound.ToString("yyyy-MM-dd")"); 

如果使用从Json.NETNewtonsoft.Json看这个链接: 在JSON序列化date

稍微简单的string清理RegEx …

var myDate =“\ / Date(1508821200000)/”;
var jsDate = new Date(parseInt(myDate.replace(/ \ D / g,'')));

这个例子起作用

  JavaScriptSerializer serializer = new JavaScriptSerializer(); DateTime dt = DateTime.Now; DateTime dt1 = dt; string jsonDateNow = serializer.Serialize(dt1);