0
votes

Horloge Live UTC, ne fonctionnant pas avec le fuseau horaire négatif

Dans mon application, j'ai besoin de créer une horloge en direct selon différentes fuseaux horaires qui sont stockés dans la base de données.

Je l'ai presque réussi. P>

mais maintenant je suis confronté à une heure négative à l'horloge, Et je suis à l'abri des idées pour trouver une solution. P>

Je reçois l'heure de l'UTC à l'aide de Nouvelle date () Code> et de calcul avec le fuseau horaire fourni à partir de la base de données. P>

Case 1: 0:31 (Time UTC) + 5:30 (Timezone) = '06: 01 ' Code> P>

Cas 2: 06:31 (Time UTC) - 6:30 (Timezone) = '00: 01 ' Code> P>

Cas 3: 5: 0 (Time UTC) - 7: 0 (Timezone ) = '-02: 00' code> p>

Case 1 et 2 fonctionne correctement mais je reçois une valeur négative dans le 3ème cas qui ne va pas. P>

J'ai essayé Ajouter des commentaires au code pour mieux comprendre ce que je fais ici. J'espère que ça vous aide. P>

Toute aide sera très appréciée. P>

p>

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>


<b id="clockTime"></b>


1 commentaires

4 Réponses :


0
votes

Si vous ne voulez pas utiliser une bibliothèque comme un moment, qui est livré avec la manipulation du fuseau horaire et il suffit de simplement ajouter / soustraire des heures d'une date donnée, que diriez-vous de les convertir en une unité de temps courante et de fonctionner à ce sujet? < PRE> XXX

Quelque chose comme ça les convertirait en un horodatage milliseconde et soustrayez cela plusieurs heures et le convertit à une date.


2 commentaires

Avec votre format spécial d'opérateur: Heures: minutes, vous venez de le convertir en heures. Voir le code mis à jour.


Sinon, vous pouvez également le convertir en minutes pour éviter les problèmes de précision dans le / 60.0 avec (parties [0] === '-'? -1: 1) * (Paysint 1]) * 60 + parseint (parties [2])) et modifier la ligne 4 à Timezone * 60 * 1000 .



1
votes

Vous devriez simplement être "en boucle" à 23:59 lorsque vous allez négativement. Vous pouvez simplement ajouter quelque chose à vérifier si cela devient négatif puis simplement ajouter le temps manquant: xxx pré>

mais idéalement, vous ne voulez vraiment pas gérer ces types de délais de fuseau horaire comme autres bibliothèques sont déjà manipulés, c'est-à-dire instant.js p>

p>

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>


<b id="clockTime"></b>


1 commentaires

Oui, je pensais la même chose, mais je n'étais pas sûr de ce calcul.



0
votes

Ajouter 24 à votre FT CODE> FT CODE> REMIS DE 24:

function CalcTime(UTCTIME, TIMEZONEOFFSETTIME) {
      if (oparator == "+") {
        var FT = UTCTIME + TIMEZONEOFFSETTIME;
      } else {
        var FT = UTCTIME - TIMEZONEOFFSETTIME + 24;
        FT = FT % 24;
      }

      FT = FT.toFixed(2);
      floatToTime(FT);
    }


0 commentaires

1
votes

Vous voulez récupérer / afficher l'heure pour un décalage de fuseau horaire donné? Sauf si vous aimez le faire pour un passe-temps, restez à l'écart des méthodes de chaîne et utilisez les fonctions de la date, non?

p>

var offsetMS = -5.5 * 3600000
var myDate = new Date()
var dateWithOffset = new Date( myDate.getTime() + offsetMS )
var formatted = dateWithOffset.toLocaleString("en-GB",{timeZone:"UTC",hour:"numeric",minute:"numeric"})
console.log(formatted)


1 commentaires

La raison d'utiliser une chaîne est que je reçois un fuseau horaire dans le format de temps ex. +5: 50 (Colon séparé), dans votre cas, ce serait -5: 30 , et si j'utilise votre méthode, j'ai toujours besoin de convertir du temps en premier.