543 votes

Convertir la date et l'heure UTC en date et heure locales

À partir du serveur, je reçois une variable date-heure dans ce format : 6/29/2011 4:52:48 PM et c'est en temps UTC. Je veux le convertir dans le fuseau horaire du navigateur de l'utilisateur actuel en utilisant JavaScript.

Comment cela peut-il être fait en utilisant JavaScript ou jQuery ?

7 votes

Faites attention. C'est un format de date bizarre, alors assurez-vous de le spécifier dans la solution que vous utilisez. Si possible, faites en sorte que le serveur envoie la date au format ISO.

562voto

digitalbath Points 1868

Ajoutez 'UTC' à la chaîne avant de la convertir en date en javascript :

var date = new Date('6/29/2011 4:52:48 PM UTC');
date.toString() // "Wed Jun 29 2011 09:52:48 GMT-0700 (PDT)"

6 votes

Function localizeDateStr (date_to_convert_str) { var date_to_convert = new Date(date_to_convert_str) ; var local_date = new Date() ; date_to_convert.setHours(date_to_convert.getHours()+local_date.getTimezoneOffset()) ; return date_to_convert.toString() ; }

5 votes

@matt offSet retourne les minutes, pas les heures, vous devez diviser par 60

0 votes

@matt note également qu'il existe des fuseaux horaires qui sont décalés de quelques fractions d'heures. Il n'est pas nécessaire d'utiliser le décalage du fuseau horaire lorsqu'il existe des fonctions getter et setter pour les valeurs UTC et locales.

149voto

Adorjan Princz Points 3601

Il s'agit d'une solution universelle :

function convertUTCDateToLocalDate(date) {
    var newDate = new Date(date.getTime()+date.getTimezoneOffset()*60*1000);

    var offset = date.getTimezoneOffset() / 60;
    var hours = date.getHours();

    newDate.setHours(hours - offset);

    return newDate;   
}

Utilisation :

var date = convertUTCDateToLocalDate(new Date(date_string_you_received));

Affichez la date en fonction du paramètre local du client :

date.toLocaleString();

58 votes

Ne fonctionne pas avec tous les fuseaux horaires. Il y a une bonne raison pour laquelle getTimeZoneOffset est en minutes ! geographylists.com/list20d.html

5 votes

@siukurnin. donc pour gérer le fuseau horaire bizarre, utilisez newDate.setTime(date.getTime()+date.getTimezoneOffset()*60*1000)

20 votes

NewDate.setMinutes(date.getMinutes() - date.getTimezoneOffset()) serait suffisant. In corrige également les heures

46voto

Nobita Points 9046

Vous devriez obtenir le décalage (UTC) (en minutes) du client :

var offset = new Date().getTimezoneOffset();

Puis faites l'addition ou la soustraction correspondante à l'heure que vous obtenez du serveur.

J'espère que cela vous aidera.

5 votes

Et l'heure d'été ?

27voto

Ben Bryant Points 1740

Mettez cette fonction dans votre tête :

<script type="text/javascript">
function localize(t)
{
  var d=new Date(t+" UTC");
  document.write(d.toString());
}
</script>

Ensuite, générez ce qui suit pour chaque date dans le corps de votre page :

<script type="text/javascript">localize("6/29/2011 4:52:48 PM");</script>

Pour supprimer le GMT et le fuseau horaire, modifiez la ligne suivante :

document.write(d.toString().replace(/GMT.*/g,""));

0 votes

Enfin cette solution a fonctionné pour moi !

13voto

user3560410 Points 1

Utilisez-le pour convertir l'heure UTC en heure locale et vice versa.

//Covert datetime by GMT offset 
//If toUTC is true then return UTC time other wise return local time
function convertLocalDateToUTCDate(date, toUTC) {
    date = new Date(date);
    //Local time converted to UTC
    console.log("Time: " + date);
    var localOffset = date.getTimezoneOffset() * 60000;
    var localTime = date.getTime();
    if (toUTC) {
        date = localTime + localOffset;
    } else {
        date = localTime - localOffset;
    }
    date = new Date(date);
    console.log("Converted time: " + date);
    return date;
}

4 votes

Ce qui s'est passé au moment de l'heure d'été. Fuseau horaire CET

0 votes

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