Afficher heure du serveur quel que soit le fuseau horaire

Pour toutes les discussions javascript, jQuery et autres frameworks
Répondre
brunov99
Messages : 1
Enregistré le : 11 sept. 2018, 23:33

Afficher heure du serveur quel que soit le fuseau horaire

Message par brunov99 » 11 sept. 2018, 23:52

Bonjour,

je dois afficher sur le site d'une radio locale l'info suivante en temps réel dans le fuseau horaire du serveur :

"Nous sommes le Jour Mois Année, chez nous il est hh:mm:ss et vous écoutez maintenant :"

Comme la radio est accessible online, l'idée est que l'es auditeurs(quelles que soient leur lieu de résidence dans le monde) sachent en permanence quelle est heure courante de la station de radio pour qu'ils puissent se repérer sur à la grille des émissions.

Merci de vos contributions
bV

Le script que j'utilise pour afficher l'heure en temps réel local est le suivant :

<SCRIPT>
function date_heure(id)
{
date = new Date;
annee = date.getFullYear();
moi = date.getMonth();
mois = new Array('Janvier', 'F&eacute;vrier', 'Mars', 'Avril', 'Mai', 'Juin', 'Juillet', 'Ao&ucirc;t', 'Septembre', 'Octobre', 'Novembre', 'D&eacute;cembre');
j = date.getDate();
jour = date.getDay();
jours = new Array('Dimanche', 'Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi');
h = date.getHours();
if(h<10)
{
h = "0"+h;
}
m = date.getMinutes();
if(m<10)
{
m = "0"+m;
}
s = date.getSeconds();
if(s<10)
{
s = "0"+s;
}
resultat = 'Nous sommes le '+jours[jour]+' '+j+' '+mois[moi]+' '+annee+' il est '+h+':'+m+':'+s+ ' et vous écoutez ' ;
document.getElementById(id).innerHTML = resultat;
setTimeout('date_heure("'+id+'");','1000');
return true;
}
window.onload=date_heure("date_heure");
</SCRIPT>
(récupéré ici : http://www.supportduweb.com/scripts_tut ... -reel.html)

Mon idée de base était de vérifier l'heure du client et de faire une opération en corrigeant l'heure locale qui s'affiche à l'aide de la fonction .getTimezoneOffset().
Mais voilà je n'y arrive pas :(

GeGaX
Messages : 20
Enregistré le : 20 févr. 2018, 21:56

Re: Afficher heure du serveur quel que soit le fuseau horaire

Message par GeGaX » 18 sept. 2018, 22:13

Salut,
Pour avoir été confronté au soucis de l'heure locale et l'heure distante, je vais te dire pour quelle solution j'ai opté.

Dans mon cadre, j'avais une liste d'instructions avec des temps donnés en UTC, CET (UTC+1) ou CEST (UTC+2) et souhaitais les afficher en heure locale pour celui qui exécutait l'extension et ça pour n'importe où sur la planète.

J'ai tout essayé, mais ça finissait toujours par craquer et pour je ne sais quelles raisons, je me refusais d'utiliser une librairie externe ...

J'ai fini par m'y intéresser et là en quelques ligne de codes c'était résolu ...

Cette librairie c'est moment-timezone.js, c'est plutôt simple d'utilisation même pour un noob (moi ... y'a même pas 1 an j'y connaissais rien au js)

Je souhaitais garder le même formatage que les instructions originelles soit YYYY-MM-DD HH:mm TZ (2018-09-18 20:00 UTC par exemple)

Voici la fonction que j'utilise :

Code : Tout sélectionner

function TzToLocal(date, time, timezone) {
    var tzGuess = moment.tz.guess();

    if ((timezone === "CET") || (timezone === "CEST")) {
        var CetOrCestToUtc = moment.tz(date + " " + time, "Europe/Paris").utc();
        var localDateTz = moment.utc(CetOrCestToUtc).tz(tzGuess);
    } else if (timezone === "UTC") {
        var localDateTz = moment.utc(date + " " + time).tz(tzGuess);
    }

    var offset = localDateTz.utcOffset();
    var absOffset = Math.abs(offset);
    var sign = (offset > 0) ? "+" : "-";
    var hoursOffset = Math.trunc(absOffset / 60);
    var MinutesHoursOffset = (hoursOffset === 0) ? "\u00b1" + "0" : sign + hoursOffset;
    var minutesOffset = absOffset % 60;
    var HoursMinutesOffset = (minutesOffset === 0) ? MinutesHoursOffset : sign + hoursOffset + ":" + minutesOffset;

    var formatDate = localDateTz.format('YYYY-MM-DD');
    var formatTime = localDateTz.format('HH:mm');
    var formatTimeZone = "UTC" + HoursMinutesOffset;
    return [formatDate, formatTime, formatTimeZone];
}
A partir d'un temps donné en UTC elle me retourne ceci 2018-09-18 22:00 UTC+2 pour la FR (en rapport avec l'exemple donné plus haut), si le temps était donné en CEST, elle me retournerait également 2018-09-18 22:00 UTC+2 et si il était en CET, elle me retournerait 2018-09-18 21:00 UTC+1.

L'avantage d'utiliser une librairie dédiée à la conversion du temps et des fuseaux horaires, c'est que ça gère également le DST (Daylight Saving Time = changement heure d'été pour faire simple).

J'espère que ça pourra t'aider ;)

Kenavo
Modifié en dernier par GeGaX le 19 sept. 2018, 00:44, modifié 1 fois.

GeGaX
Messages : 20
Enregistré le : 20 févr. 2018, 21:56

Re: Afficher heure du serveur quel que soit le fuseau horaire

Message par GeGaX » 18 sept. 2018, 23:34

Ça donnerait ceci :

Image

Tu "forces" le timezone à Europe/Paris pour avoir la date et l'heure locale FR.

Tu auras besoin de faire appel ou d'intégrer ces librairies :

Image

;)

Répondre