222 votes

Comment puis-je afficher une date/heure dans les paramètres régionaux de l'utilisateur format et le décalage de l'heure?

Je veux que le serveur de toujours servir les dates au format UTC dans le code html, et javascript sur le site du client convertir à l'utilisateur du fuseau horaire local.

Bonus si je peux la sortie dans les paramètres régionaux de l'utilisateur format de date.

221voto

kch Points 25855

Qui me semble le plus infaillible pour commencer avec une date UTC est de créer un nouveau Date de l'objet et de l'utilisation de l' setUTC… méthodes pour définir la date/l'heure que vous voulez.

Ensuite, les différentes toLocale…String méthodes offrent une sortie.

Exemple:

// This would come from the server.
// Also, this whole block could probably be made into an mktime function.
// All very bare here for quick grasping.
d = new Date();
d.setUTCFullYear(2004);
d.setUTCMonth(1);
d.setUTCDate(29);
d.setUTCHours(2);
d.setUTCMinutes(45);
d.setUTCSeconds(26);

alert(d);                        // -> Sat Feb 28 2004 23:45:26 GMT-0300 (BRT)
alert(d.toLocaleString());       // -> Sat Feb 28 23:45:26 2004
alert(d.toLocaleDateString());   // -> 02/28/2004
alert(d.toLocaleTimeString());   // -> 23:45:26

Quelques références:

66voto

theDmi Points 1307

Cette question est assez vieux, donc MomentJs n'existait pas à l'époque, mais pour les nouveaux projets, il peut simplifier les tâches de ce genre.

Juste dire momentJS pour analyser votre chaîne de date au format UTC comme suit (créer un ISO-8601 compatible chaîne sur le serveur pour obtenir des résultats cohérents sur tous les navigateurs):

moment.utc("2013-02-08T09:30:26 Z");

Utilisez ensuite l'objet de votre demande, il existe de nombreuses façons pour le format de la date et de l'heure de valeurs ou d'extraire des parties de celui-ci. Il suffit de prendre un coup d'oeil à la momentJS docs.

26voto

jop Points 31978

Vous pouvez utiliser new Date().GetTimezoneOffset()/60 pour le fuseau horaire. Il y a aussi un toLocaleString() méthode pour l'affichage d'une date à l'aide des paramètres régionaux de l'utilisateur.

Voici la liste complète: Travailler avec les Dates

8voto

simianarmy Points 1029

Une fois que vous avez votre date objet construit, voici un extrait de code pour la conversion:

La fonction prend un UTC formaté objet Date et chaîne de format.
Vous aurez besoin d'un Date.strftime prototype.

function UTCToLocalTimeString(d, format) {
    if (timeOffsetInHours == null) {
        timeOffsetInHours = (new Date().getTimezoneOffset()/60) * (-1);
    }
    d.setHours(d.getHours() + timeOffsetInHours);

    return d.strftime(format);
}

6voto

Mark Points 454

Voici ce que j'ai utilisé dans le passé des projets:

var myDate = new Date();
var tzo = (myDate.getTimezoneOffset()/60)*(-1);
//get server date value here, the parseInvariant is from MS Ajax, you would need to do something similar on your own
myDate = new Date.parseInvariant('<%=DataCurrentDate%>', 'yyyyMMdd hh:mm:ss');
myDate.setHours(myDate.getHours() + tzo);
//here you would have to get a handle to your span / div to set.  again, I'm using MS Ajax's $get
var dateSpn = $get('dataDate');
dateSpn.innerHTML = myDate.localeFormat('F');

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