Converting.NET DateTime à JSON [dupliquer]

possibilité de dupliquer:

comment formater une date JSON?

mon service web renvoie une date à un appel jQuery. Le service renvoie les données dans ce format:

/Date(1245398693390)/

Comment puis-je convertir cette date en une date compatible JavaScript?

226
demandé sur Community 2009-06-19 12:05:27

10 réponses

Ce qui est retourné est le nombre de millisecondes depuis l'époque. Vous pourriez faire:

var d = new Date();
d.setTime(1245398693390);
document.write(d);

sur la façon de formater la date exactement comme vous voulez, voir la référence complète Date à http://www.w3schools.com/jsref/jsref_obj_date.asp

vous pouvez dépouiller les non-chiffres en analysant l'entier ( comme suggéré ici ):

var date = new Date(parseInt(jsonDate.substr(6)));

ou en appliquant l'expression régulière suivante: (de Tominator dans les commentaires):

var jsonDate = jqueryCall();  // returns "/Date(1245398693390)/"; 
var re = /-?\d+/; 
var m = re.exec(jsonDate); 
var d = new Date(parseInt(m[0]));
238
répondu vahidg 2017-05-23 12:26:03

j'utilise cette méthode depuis un certain temps:

using System;

public static class ExtensionMethods {
  // returns the number of milliseconds since Jan 1, 1970 (useful for converting C# dates to JS dates)
  public static double UnixTicks(this DateTime dt)
  {
    DateTime d1 = new DateTime(1970, 1, 1);
    DateTime d2 = dt.ToUniversalTime();
    TimeSpan ts = new TimeSpan(d2.Ticks - d1.Ticks);
    return ts.TotalMilliseconds;
  }
}

en supposant que vous développez contre .NET 3.5, c'est un simple copier/coller. Vous pouvez le porter autrement.

vous pouvez encapsuler ceci dans un objet JSON, ou simplement l'écrire dans le flux de réponse.

côté Javascript / JSON, vous convertissez ceci en date en passant simplement les tiques dans un nouvel objet Date:

jQuery.ajax({
  ...
  success: function(msg) {
    var d = new Date(msg);
  }
}
77
répondu Jeff Meatball Yang 2011-11-16 17:22:28

pour analyser la chaîne de date à L'aide de la chaîne.remplacer par:

var milli = "/Date(1245398693390)/".replace(/\/Date\((-?\d+)\)\//, '');
var d = new Date(parseInt(milli));
33
répondu William Niu 2010-09-07 01:57:04

si vous passez un DateTime d'un code. net à un code javascript, C#:

DateTime net_datetime = DateTime.Now;

javascript le traite comme une chaîne, comme "/Date(1245398693390)/" :

vous pouvez le convertir comme suit:

// convert the string to date correctly
var d = eval(net_datetime.slice(1, -1))

ou:

// convert the string to date correctly
var d = eval("/Date(1245398693390)/".slice(1, -1))
17
répondu ytl 2010-12-29 08:27:12

si vous avez de la difficulté à obtenir des informations sur l'heure, vous pouvez essayer quelque chose comme ceci:

    d.date = d.date.replace('/Date(', '');
    d.date = d.date.replace(')/', '');  
    var expDate = new Date(parseInt(d.date));
16
répondu davidmdem 2010-03-09 18:14:38

la conversion de 1970,1,1 a besoin du double arrondi à zéro décimale places je pense

DateTime d1 = new DateTime(1970, 1, 1);
DateTime d2 = dt.ToUniversalTime();
TimeSpan ts = new TimeSpan(d2.Ticks - d1.Ticks);
return Math.Round( ts.TotalMilliseconds,0);

du côté du client j'utilise

new Date(+data.replace(/\D/g, ''));
11
répondu Flash 2011-10-03 23:21:36

http://stevenlevithan.com/assets/misc/date.format.js

var date = eval(data.Data.Entity.Slrq.replace(/\/Date\((\d )\)\//gi, "new Date()"));  
alert(date.format("yyyy-MM-dd HH:mm:ss"));  
alert(dateFormat(date, "yyyy-MM-dd HH:mm:ss"));  
7
répondu harry 2011-09-13 20:57:21

vous pouvez essayer une bibliothèque tierce comme json.net il y a de la documentation sur le site du projet. Ça dit qu'il faut un .net 3.5.

sinon il y en a un autre qui s'appelle Nii.json qui, je crois, est un port de java. J'ai trouvé un lien vers elle sur ce blog

6
répondu Dave Archer 2009-06-19 08:11:52

les réponses précédentes indiquent toutes que vous pouvez faire ce qui suit:

var d = eval(net_datetime.slice(1, -1));

cependant, cela ne fonctionne ni dans Chrome ni dans FF parce que ce qui est évalué littéralement est:

// returns the current timestamp instead of the specified epoch timestamp
var d = Date([epoch timestamp]);

la bonne façon de procéder est:

var d = eval("new " + net_datetime.slice(1, -1)); // which parses to

var d = new Date([epoch timestamp]); 
5
répondu cowmoo 2011-06-10 18:50:37

a pensé que je pourrais ajouter ma solution que j'ai utilisé.

si vous utilisez le System.Web.Script.Serialization.JavaScriptSerializer() alors le temps retourné ne sera pas spécifique à votre fuseau horaire. Pour corriger cela, vous voudrez également utiliser dte.getTimezoneOffset() pour obtenir de nouveau à votre heure correcte.

String.prototype.toDateFromAspNet = function() {
    var dte = eval("new " + this.replace(/\//g, '') + ";");
    dte.setMinutes(dte.getMinutes() - dte.getTimezoneOffset());
    return dte;
}

maintenant, vous n'avez qu'à appeler

"/Date(1245398693390)/".toDateFromAspNet();

Ven 19 Juin 2009 00:04:53 GMT-0400 (Heure Avancée de l'est) {}

4
répondu used2could 2010-12-07 02:36:07