2010-03-22 6 views
2

J'utilise actuellement le jQuery fullcalendar plugin mais je suis tombé sur un problème concernant l'heure d'été en Grande-Bretagne. Une fois l'heure d'été prise en compte, les heures sont affichées en une heure hors phase.Comment analyser une chaîne de format de date UTC en heure locale?

Le problème semble être avec les plug-ins fonction d'analyse syntaxique. Quelqu'un peut-il me fournir la fonction d'analyser une chaîne UTC qui inclut la démonation 'Z' dans une date locale pour l'affichage?

+0

Pouvez-vous ajouter une date d'échantillonnage au moins. Vous ne pouvez pas vous attendre à ce que les gens recherchent quelle sorte de date est affectée par cela. – jitter

Répondre

1

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 le vrai cause de votre problème.

Le plugin utilise en interne le même code que la fonction parseISO8601 proposée par Andy E qui vient de Parsing W3C's ISO 8601 Date/Times in JavaScript.

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

Après avoir regardé de plus près le code, j'ai remarqué que le plugin semble ignorer le fuseau horaire que vous êtes.

comparer 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éfini sur false. Mais ce n'est simplement jamais le cas. parseISO8601() dans ce plugin est toujours appelé avec ignoreTimezone défini sur 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

1

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

+0

@jitter: vous me downvotez pour un bug qui a été corrigé? (et maintenant vous avez édité votre commentaire, le mien n'a aucun sens ...) –

+0

@jitter: done. Je peux seulement vous fournir ma propre expérience en utilisant la fonction - l'utiliser dans un environnement de production depuis 2006 pour analyser les chaînes de date de l'API eBay. Testé dans mon fuseau horaire local, BST et GMT, et d'autres fuseaux horaires sans problèmes et aucun signalé par mes clients. –

+0

Après plus d'enquête, j'ai découvert ce qui ne va pas. Ainsi enlevé mes commentaires trompeurs et a repris la downvote – jitter

1

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; 
} 
+0

Essayé, ne fonctionne pas. –

+0

Cela fonctionne: http://jsbin.com/urenok/edit Merci pour downvoting –

Questions connexes