Question

J'utilise actuellement plugin jQuery fullcalendar mais je suis tombé sur une question au sujet de l'heure d'été temps en Grande-Bretagne. Après les économies de jour prennent effet les heures sont affichées une heure de phase.

Le problème semble être avec les plug-ins fonction d'analyse syntaxique. Quelqu'un peut-il s'il vous plaît me donner le funciton pour analyser une chaîne UTC qui comprend la demonination « Z » en date heure locale pour l'affichage?

Était-ce utile?

La solution

Après une certaine confusion (réponses par moi et Andy E et surtout mes commentaires à sa réponse) que vous avez probablement manqué de toute façon, j'ai découvert ce qui semble être la cause réelle de votre problème.

Le plugin utilise en interne le même code de la fonction parseISO8601 qui a été proposée par Andy E qui vient de Parsing ISO 8601 du W3C date / Times en JavaScript .

Mais bien que Andy E indique que ce code fonctionne sans problèmes, le plugin fullcalendar, qui utilise ce code aussi, semble avoir un bug.

Après avoir examiné de plus près le code, je remarquais que le plugin semble ignorer le fuseau horaire que vous êtes.

Comparez ces extraits de code

Snippet à partir du code d'origine de delete.me.uk

if (d[14]) {
    offset = (Number(d[16]) * 60) + Number(d[17]);
    offset *= ((d[15] == '-') ? 1 : -1);
}

code de fullcalendar.js

if (!ignoreTimezone) {
    if (m[14]) {
        offset = Number(m[16]) * 60 + Number(m[17]);
        offset *= m[15] == '-' ? 1 : -1;
    }
    offset -= date.getTimezoneOffset();
}

Comme vous pouvez le voir le plugin ne gère que le fuseau horaire si ignoreTimezone est définie sur false. Mais c'est tout simplement jamais le cas. parseISO8601() dans ce plug-in est toujours appelé avec set ignoreTimezone true.

Ainsi, je parie que le bug vient de cela et vous devriez envisager de communiquer avec l'auteur du plugin. Mais d'abord, vous devez vérifier si la date s'analysée correctement si vous définissez ignoreTimezone false dans le code du plugin

Autres conseils

Cela pourrait fonctionner pour vous:

function parseDate(value) {
    var a = /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value);

    if (a) {
        return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4], +a[5], +a[6]));
    }

    return null;
}

Je suppose que vous voulez dire une chaîne de date ISO 8601 ( UTC est une norme de temps, non un format d'affichage). Je l'ai utilisé cette fonction de delete.me.uk depuis quelques années maintenant, dans un environnement de production sans problèmes de test dans BST / GMT (mon fuseau horaire local).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top