48 votes

La sérialisation Javascript de DateTime dans asp.net ne donne-t-elle pas un objet de date javascript?

Lorsque j'analyse un DateTime sur json en .Net, il renvoie une chaîne (c'est-à-dire "\/Date(1249335194272)\/" ). Comment est-ce que je lui fais retourner un constructeur d'objet de date de js non enroulé dans une chaîne?

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

    		}
    	}
    }
}
 

56voto

Chris S Points 32376

Il s'agit d'une limitation connue avec JSON. Cette réponse pourrait vous aider, en particulier:

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

14voto

Your Friend Ken Points 2615

Cela semble fonctionner (merci Chris S pour l'idée). Dans le C #, faites un remplacement pour enlever le wrapper de chaîne autour de l'objet date;

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

..et après avoir supprimé les guillemets et ajouté le nouveau préfixe à Date, ce js fonctionne maintenant. Hourra!

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

7voto

Furhan Points 41

Manipulation javascript simple comme ceci:

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

Transmettez la date JSON en tant que paramètre à la fonction et elle retournera une date javascript.

4voto

Ryan Triggs Points 21

Avec une petite manipulation de chaîne et un eval, vous pouvez créer un objet Date.

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

1voto

Kat Lim Ruiz Points 381

Vous pouvez essayer ceci:

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

Cela semble fonctionner en FF et IE.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X