9 votes

Convertir une date temporelle en date temporelle JSON

J'ai un WebService qui retourne un champ DateTime.

J'obtiens un résultat /Date(1379048144000)/ pero

Je veux juste 1379048144000 Comment puis-je y parvenir ?

[WebMethod]
public DateTime GetServerDate()
{
    return DateTime.Now;
}

En définissant Header Content-Type : application/json ; charset=utf-8 ; j'ai obtenu le résultat suivant /Date(1379048144000)/ .

15voto

Joe Points 60749

Vous pourriez modifier votre WS pour qu'il renvoie un long avec la valeur de la DateTime. La valeur à retourner est le nombre de millisecondes depuis l'époque Unix (01/01/1970). Cela pourrait être fait avec une méthode d'extension sur DateTime quelque chose comme :

public static class DateTimeExtensions
{
    ...
    private static readonly DateTime UnixEpoch = new DateTime(1970, 1, 1);

    public static long ToUnixTime(this DateTime dateTime)
    {
        return (dateTime - UnixEpoch).Ticks / TimeSpan.TicksPerMillisecond;
    }
    ...
}

Et votre méthode de service web pourrait ressembler à quelque chose comme :

public long GetMyDate(...)
{
    DateTime dateTime = ...;
    return dateTime.ToUnixTime();
}

9voto

Ben Points 343

Avec Json.NET :

string date = Newtonsoft.Json.JsonConvert.SerializeObject(DateTime.Now);

5voto

Stuart Horner Points 51

Côté client, vous pouvez utiliser cette fonction pour afficher une date correcte au client (je l'utilise sur mes projets) :

function parseJsonDate(jsonDate) {
var offset = new Date().getTimezoneOffset() * 60000;
var parts = /\/Date\((-?\d+)([+-]\d{2})?(\d{2})?.*/.exec(jsonDate);
if (parts[2] == undefined) parts[2] = 0;
if (parts[3] == undefined) parts[3] = 0;
d = new Date(+parts[1] + offset + parts[2] * 3600000 + parts[3] * 60000);
date = d.getDate() + 1;
date = date < 10 ? "0" + date : date;
mon = d.getMonth() + 1;
mon = mon < 10 ? "0" + mon : mon;
year = d.getFullYear();
return (date + "." + mon + "." + year);
};

Cette fonction renvoie la bonne date au format : jj.mm.aaaa, mais vous pouvez la modifier si vous le souhaitez. J'espère vous avoir aidé.

2voto

Matias Points 391

Vous pouvez toujours résoudre votre problème lorsque vous envoyez une date dans un objet JSON à JS en convertissant la date comme suit :

var myJSDate = (new Date(parseInt(obj.MyDate.substr(6)))).toJSON();

Où obj.Date contient la date que vous voulez formater.

Vous obtiendrez alors quelque chose comme ceci : "2013-10-25T18:04:17.289Z"

Vous pouvez toujours le vérifier dans la console de Chrome en écrivant :

(new Date()).toJSON();

J'espère que cela vous aidera !

0voto

viorel Points 25

Il existe deux solutions :

  1. côté client :

    function ToJavaScriptDate(value) { var pattern = /Date(([^)]+))/; var results = pattern.exec(value); var dt = new Date(parseFloat(results[1])); return (dt.getMonth() + 1) + "/" + dt.getDate() + "/" + dt.getFullYear(); }

Il est possible d'avoir besoin également de convertir en objet de données var date = new Date(xxx)

  1. Côté serveur :

    Newtonsoft.Json.JsonConvert.SerializeObject(your_object)

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