6
votes

Conversion Objet DateTime .NET à l'objet de date JavaScript

J'ai le problème suivant:

Je récupère un objet DateTime de SQL Server et passez-le via JSON (en utilisant $ .ajax) à JavaScript. J'ai eu des difficultés à essayer de convertir l'objet récupéré à un objet de date dans JavaScript. L'objet récupéré est une chaîne de valeur »/ date (615592800000) /». Je pense que la valeur est une époque époque.

Ma question est là, existe-t-il un autre moyen de récupérer l'objet de date que d'utiliser RegEx pour sélectionner la valeur EPOCH, puis créer un nouvel objet de date?

Je suis assez nouveau à JS, alors toute aide serait appréciée.


0 commentaires

4 Réponses :


7
votes

pas que je sache ... c'est la fonction que j'utilise, juste au cas où ...

function toDateFromJson(src) {
    return new Date(parseInt(src.substr(6)));
}


1 commentaires

THX. Pas exactement ce que je cherchais, mais c'est assez simple et utilisable.



0
votes

Ceci est parce que JSON en standard n'a pas de format DateTime - les fournisseurs sont libres de le marquer comme ils le souhaitent. WCF a ce format étrange de / date () / Je suis confronté à cela il y a quelques mois. Utiliser JQuery et JQuery UI, il ressemblera à cela. contrôlé est l'identifiant d'un élément avec xxx


0 commentaires

0
votes

La voie Regex est la voie parfaitement correcte.

var msDateRegex = /"\\\/Date\((-?\d+)\)\\\/"/g;

var msDateJsonConverter = function(data) {
    return JSON.parse($.trim(data.replace(msDateRegex, '{"__date":$1}')), function(key, value) {
        return value && typeof value.__date == "number" ? new Date(value.__date) : value;
    });
};

$.ajaxSetup({ converters: { "text json": msDateJsonConverter } });


0 commentaires

0
votes

Essayez ceci. Passez la chaîne de date que vous arrivez à la fonction ci-dessous. Il vous donnera l'objet de date JavaScript.

function (val) {
        var reISO = /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/;
        var reMsAjax = /^\/Date\((d|-|.*)\)[\/|\\]$/;


            if (val)) {
                        var a = reISO.exec(val);
                        if (a) {
                            val = new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4], +a[5], +a[6]));
                            return val;
                        }
                        a = reMsAjax.exec(val);
                        if (a) {
                            var b = a[1].split(/[-+,.]/);
                            val = new Date(b[0] ? +b[0] : 0 - +b[1]);
                            return val;
                        }
                    }

       return val; 
    }


0 commentaires