Serialização de JavaScript de DateTime em asp.net não está dando um object de data de javascript?

Quando eu analiso um DateTime para json em .Net, ele retorna uma string (ou seja, "\/Date(1249335194272)\/" ). Como faço para retornar um construtor de object js Date não encapsulado em uma string?

 // js server code var dteNow = ; // 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); } } } } 

Essa é uma limitação conhecida com JSON. Esta resposta pode ajudá-lo, especificamente:

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

Isso parece funcionar (Obrigado Chris S pela idéia). No C # fazer uma substituição para remover o wrapper de seqüência de caracteres em torno do object de data;

  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(")\\/\"", ")"); } } } } 

..e depois de remover as aspas e adicionando o novo prefixo para Date this js agora funciona. Viva!

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

Manipulação simples de javascript como esta:

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

Passe na data JSON como parâmetro para a function e ela retornará uma data de javascript.

Com uma pequena manipulação de string e um eval você pode criar um object Date

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

Você pode tentar isto:

 "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); 

Isso parece funcionar em FF e IE.

Descobri que essa é uma técnica útil para lidar com esse problema:

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

Ele permite que DateTimes sejam serializados como strings de data ISO 8601, que podem ser usados ​​com o construtor JavaScript Date e tem o bônus de ser legível por humanos.

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

Aqui está uma opção usando Date.parse e DateTime.ToString:

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

Se você precisar de tempo, considere o seguinte. Eu acredito que isso depende de uma nova especificação de javascript:

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

Aqui está uma opção usando jQuery: (Tenho certeza que há uma maneira de adicionar o tempo aqui)

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

Se estiver usando do Json.NET ou Newtonsoft.Json veja este link: Serializando Datas no JSON

Ligações de corda ligeiramente mais simples com o RegEx …

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

Este exemplo funciona

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