0 votes

Erreur de date actuelle JavaScript : sortie inattendue avec la gestion du fuseau horaire

Je travaille sur un projet JavaScript qui consiste à récupérer et à afficher la date et l'heure actuelles, en tenant compte des différents fuseaux horaires. Cependant, j'ai rencontré une erreur complexe dans mon code qui entraîne des résultats inattendus, en particulier lorsqu'il s'agit de fuseaux horaires soumis à des changements d'heure d'été.

Voici le code JavaScript que j'utilise :

function getCurrentDateTime(timezone) {
    const now = new Date();
    const options = {
        timeZone: timezone,
        year: 'numeric',
        month: 'numeric',
        day: 'numeric',
        hour: 'numeric',
        minute: 'numeric',
        second: 'numeric',
    };

    const formatter = new Intl.DateTimeFormat('en-US', options);
    const formattedDate = formatter.format(now);

    return formattedDate;
}

// Example usage:
const newYorkTime = getCurrentDateTime('America/New_York');
const londonTime = getCurrentDateTime('Europe/London');

Cependant, lorsque j'exécute ce code, j'obtiens des résultats inattendus, en particulier lors des transitions vers l'heure d'été. L'heure affichée peut ne pas refléter le décalage horaire correct. Pourriez-vous s'il vous plaît m'aider à trouver et à corriger l'erreur dans mon code afin qu'il gère de manière appropriée les fuseaux horaires et les changements d'heure d'été lors de la récupération et de l'affichage de la date et de l'heure actuelles ? J'ai essayé tellement d'autres sites comme scaler, mais je n'ai pas trouvé la solution. Si quelqu'un peut aider, je serais reconnaissant. J'apprécie votre aide pour résoudre ce problème complexe.

0voto

Jimmy Neutron Points 70

L'erreur dans votre code réside dans l'utilisation de la méthode toLocaleString() pour formater la date et l'heure. Cette méthode utilise les paramètres régionaux du navigateur, ce qui peut entraîner des résultats incorrects lors de l'affichage des dates dans différents fuseaux horaires.

Pour résoudre ce problème, vous pouvez utiliser l'objet Intl.DateTimeFormat avec l'option timeZone pour spécifier le fuseau horaire souhaité. Voici une version modifiée de votre code qui prend en compte cette modification :

function getCurrentDateTime(timezone) {
    const now = new Date();
    const options = {
        timeZone: timezone,
        year: 'numeric',
        month: 'numeric',
        day: 'numeric',
        hour: 'numeric',
        minute: 'numeric',
        second: 'numeric',
    };

    const formatter = new Intl.DateTimeFormat('en-US', options);
    const formattedDate = formatter.format(now);

    return formattedDate;
}

// Example usage:
const newYorkTime = getCurrentDateTime('America/New_York');
const londonTime = getCurrentDateTime('Europe/London');

En utilisant l'objet Intl.DateTimeFormat avec l'option timeZone, vous pouvez obtenir la date et l'heure actuelles dans le fuseau horaire spécifié, en tenant compte automatiquement des changements d'heure d'été.

N'hésitez pas à tester ce code et à l'adapter à vos besoins spécifiques. J'espère que cela résoudra votre problème lié à la gestion des fuseaux horaires et des changements d'heure d'été.

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