c# - month - ¿La serialización de Javascript de DateTime en asp.net no está dando un objeto de fecha de javascript?
set date javascript (11)
Aquí hay una opción usando Date.parse y DateTime.ToString:
var lowerBound = new Date(Date.parse("@Model.LowerBound.ToString("MMMM dd, yyyy")"));
Si necesita tiempo, considere lo siguiente. Creo que esto se basa en una nueva especificación de JavaScript:
var lowerBound = new Date(Date.parse("@Model.LowerBound.ToUniversalTime().ToString("s")"));
Aquí hay una opción usando jQuery: (estoy seguro de que hay una manera de agregar el tiempo aquí)
var lowerBound = $.datepicker.parseDate(''yy-mm-dd'', "@Model.LowerBound.ToString("yyyy-MM-dd")");
Cuando analizo un DateTime a json en .Net, devuelve una cadena (es decir, "//Date(1249335194272)//"
). ¿Cómo puedo hacer que devuelva un js El constructor del objeto Date no se ajusta en una cadena?
// 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);
}
}
}
}
Con un poco de manipulación de cadenas y una evaluación, puede crear un objeto Date
var dteNow = "//Date(1249335477787)//";
var dteObj = eval("new " + dteNow.replace(////g,""));
Esta es una limitación conocida con JSON. Esta respuesta puede ayudarte, específicamente:
value = new Date(parseInt(value.replace("/Date(", "").replace(")/",""), 10));
Este ejemplo funciona
JavaScriptSerializer serializer = new JavaScriptSerializer();
DateTime dt = DateTime.Now;
DateTime dt1 = dt;
string jsonDateNow = serializer.Serialize(dt1);
Esto parece funcionar (Gracias Chris S por la idea). En C #, reemplace para eliminar el envoltorio de cadena de todo el objeto de fecha;
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(")////"", ")");
}
}
}
}
..y después de eliminar las comillas y agregar el nuevo prefijo a Date, este js ahora funciona. ¡Hurra!
testCase= <%= jsonESHACase %>;
if (testCase) {
document.write(testCase["ClosingDate"].format("MM dd yyyy"));
}
He descubierto que esta es una técnica útil para lidiar con este problema:
http://icanmakethiswork.blogspot.co.uk/2012/04/beg-steal-or-borrow-decent-javascript.html
Permite que DateTimes se serialice como cadenas de fechas ISO 8601 que se pueden usar con el constructor de fecha de JavaScript y tiene la ventaja de ser legible por humanos.
Limpieza de cadenas un poco más simple con RegEx ...
var myDate = "/ / Date (1508821200000) /";
var jsDate = new Date (parseInt (myDate.replace (/ / D / g, '''')));
Manipulación simple de javascript como esta:
function(param){
var date = new Date(parseInt(param.substr(6)));
return date;
}
Pase la fecha JSON como parámetro a la función y devolverá una fecha de javascript.
Puedes intentar esto:
"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);
Esto parece funcionar en FF e IE.
Si usa Json.NET
o Newtonsoft.Json
mire este enlace: Fechas de serialización en JSON
jsonDateNow = String.Format("Date({0},{1},{2})", Date().Now.getYear(), Date().Now.getMonth() -1, Date().Now.getDay());