Duplicate possible:
Comment formater une date JSON?
Mon service Web renvoie un DateTime à un appel jQuery. Le service renvoie les données dans ce format:
/Date(1245398693390)/
Comment puis-je convertir cela en une date compatible avec JavaScript?
Ce qui est retourné est en millisecondes depuis Epoch. Vous pourriez faire:
var d = new Date();
d.setTime(1245398693390);
document.write(d);
Pour formater la date exactement comme vous le souhaitez, reportez-vous à la référence complète Date
à l’adresse http://www.w3schools.com/jsref/jsref_obj_date.asp
Vous pouvez supprimer les non-chiffres en analysant le nombre 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]));
J'utilise cette méthode depuis un moment:
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éveloppiez contre .NET 3.5, il s’agit d’un copier/coller simple. Vous pouvez sinon le porter.
Vous pouvez l'encapsuler dans un objet JSON ou simplement l'écrire dans le flux de réponse.
Du côté Javascript/JSON, vous convertissez cela en date en passant simplement les graduations dans un nouvel objet Date:
jQuery.ajax({
...
success: function(msg) {
var d = new Date(msg);
}
}
Pour analyser la chaîne de date à l'aide de String.replace avec backreference:
var milli = "/Date(1245398693390)/".replace(/\/Date\((-?\d+)\)\//, '$1');
var d = new Date(parseInt(milli));
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 en flux:
// 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))
Si vous rencontrez des difficultés pour obtenir les informations de temps, 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));
la conversion de 1970,1,1 a besoin du double arrondi à zéro décimale 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);
côté client j'utilise
new Date(+data.replace(/\D/g, ''));
http://stevenlevithan.com/assets/misc/date.format.js
var date = eval(data.Data.Entity.Slrq.replace(/\/Date\((\d )\)\//gi, "new Date($1)"));
alert(date.format("yyyy-MM-dd HH:mm:ss"));
alert(dateFormat(date, "yyyy-MM-dd HH:mm:ss"));
Les réponses précédentes indiquent toutes que vous pouvez effectuer les opérations suivantes:
var d = eval(net_datetime.slice(1, -1));
Toutefois, cela ne fonctionne ni dans Chrome ni dans FF, car ce qui est littéralement évalué est:
// returns the current timestamp instead of the specified Epoch timestamp
var d = Date([Epoch timestamp]);
La bonne façon de faire est:
var d = eval("new " + net_datetime.slice(1, -1)); // which parses to
var d = new Date([Epoch timestamp]);
J'ai pensé ajouter la solution que j'utilisais.
Si vous utilisez la System.Web.Script.Serialization.JavaScriptSerializer()
, l'heure renvoyée ne sera pas spécifique à votre fuseau horaire. Pour résoudre ce problème, vous voudrez également utiliser dte.getTimezoneOffset()
pour le ramener à l'heure exacte.
String.prototype.toDateFromAspNet = function() {
var dte = eval("new " + this.replace(/\//g, '') + ";");
dte.setMinutes(dte.getMinutes() - dte.getTimezoneOffset());
return dte;
}
maintenant tu appelleras
"/Date(1245398693390)/".toDateFromAspNet();
Vendredi 19 juin 2009 00:04:53 GMT-0400 (heure avancée de l'Est) {}