Javascript objet date dans différentes locale et fuseau horaire
J'ai besoin d'écrire une application web qui montrent les événements de gens dans les différents paramètres régionaux. J'ai presque fini, mais il y a 2 problèmes avec la date:
- à l'aide de la date de l'objet javascript, la date dépend de l'utilisateur les paramètres de l'ordinateur et il n'est pas fiable
- si il y a un événement dans un lieu avec différents fuseau horaire respect de l'utilisateur position actuelle, j'ai l'impression de l'intérieur
()
. Est-il possible en javascript pour créer un objet date avec un fuseau horaire et l'heure d'été?
Je trouve aussi que certains solution de contournement, comme jsdate et la date de webservices, mais ils n'ont pas à surmonter le problème d'avoir un objet javascript avec le bon fuseau horaire et l'heure d'été réglages (pour la date de l'opération telles que l'ajout de jours et ainsi de suite).
OriginalL'auteur Ruben Rizzi | 2011-06-15
Vous devez vous connecter pour publier un commentaire.
Un couple de choses à garder à l'esprit.
Stocker tous les cas datetimes en heure UTC
Oui, il n'y a pas moyen de contourner cela.
Trouver tous les fuseaux horaires...
...de tous les utilisateurs dans le système. Vous pouvez utiliser ce script de détection: http://site.pageloom.com/automatic-timezone-detection-with-javascript. Il vous remettra un fuseau horaire clés comme par exemple "les etats-unis/Phoenix".
Dans votre cas, vous avez besoin de stocker le fuseau horaire avec l'événement, puisque l'utilisateur peut changer de fuseau horaire - mais l'événement aura toujours qui s'est passé dans une spécifique. (argh)
Choisissez votre mécanisme d'affichage
Si vous voulez localiser les dates de vos événements avec Javascript, il y a une chouette bibliothèque pour ça aussi (qui peut utiliser les touches fourni avec le script précédent). Ici: https://github.com/mde/timezone-js.
avec cette bibliothèque, vous pouvez par exemple faire:
ou
où UTC_TIMESTAMP par exemple, pourrait être
1193855400000
. EtAmerica/New_York
est le fuseau horaire que vous avez détecté lorsque l'événement a eu lieu.La
dt
objet que vous obtenez à partir de ce va se comporter comme un normal JavaScriptDate
objet. Mais sera automatiquement "correcte" même le fuseau horaire que vous avez spécifié (y compris l'heure d'été).Si vous le souhaitez, vous pouvez faire toutes les corrections dans le backend - avant de vous servir de la page. Car je ne sais pas quel langage de programmation que vous utilisez là, je ne peux pas vous donner dans l'immédiat, des conseils. Mais, fondamentalement, il suit la même logique, si vous connaissez le fuseau horaire et l'heure UTC datetime -> vous pouvez localiser les datetime. Tous les langages de programmation ont des bibliothèques.
OriginalL'auteur Jon Nylander
Vous manque le point d'un objet Date. Il représente un point particulier dans le temps. Comme je parle, c'est 1308150623182 partout dans le monde. Le fuseau horaire n'est mise en jeu lorsque vous souhaitez affichage le temps à l'utilisateur. Une opération comme "l'ajout d'un jour" ne comportent pas de temps horaire.
Peut-être que la question est underspecified. Si c'est 2 h 30 du matin, le jour avant le fuseau horaire décale vers l'avant, ce qui signifie "l'ajout d'un jour"?
Exactement. Si vous voulez dire "l'ajout de 24 heures", alors vous êtes beaux. Mais la plupart des gens pensent de ces transitions d'être invisible parce qu'ils sont généralement endormi, quand ils se produisent. Donc, si vous demandez à un profane à quelle heure il sera de 1 jour à partir de 2:30 AM, ils vont s'attendre à 2:30 AM - pas de la possible 1 h 30 ou 3 h 30. Les gens ont tendance à penser en termes de calendriers, même lorsque ces calendriers sont sournois. 🙂
Je suppose que c'est pourquoi vous n'avez pas demander laïcs: ils donnent inutile de réponses. (J'ai été dans un produit de réunion, hier, et a demandé comment nous devrions traiter un cas limite pour un système de prises en charge de 700 000 utilisateurs et le PM l'a rejeté en disant: "90% du temps, ça ne s'est pas produit." J'ai presque étranglé son.)
OriginalL'auteur Malvolio
Une possibilité pourrait être d'utiliser la date et l'heure UTC pour tout. De cette façon, il n'y a rien à convertir.
Une autre est d'avoir votre serveur pour fournir l'heure et la date. Ensuite, vous n'avez pas à dépendre de l'utilisateur afin de la faire correctement, et vous n'avez pas à vous soucier de, où de l'utilisateur de votre fuseau horaire.
OriginalL'auteur James Alarie
Utilisation
getUTCDate()
,getUTCHours()
, ... au lieu degetDate()
,getHours()
,...getTimetoneOffset()
pourrait être utile, aussi.OriginalL'auteur Meeple