MomentJS arriver JavaScript Date au format UTC
Je ne suis pas en mesure d'obtenir le JavaScript de la chaîne de Date pour MongoDB enregistrer via le suivant. Il continue d'utiliser mon heure locale.
var utc = moment.utc().valueOf();
console.log(moment.utc(utc).toDate());
De sortie:
Tue Nov 11 2014 14:42:51 GMT-0500 (EST)
J'en ai besoin pour être en UTC, donc je peux coller ce timestamp dans Mongo donc taper serait Date
.
Comment puis-je le faire?
- Ce qui rompt lorsque vous rangez l'objet date que c'est?
- il est stocké comme un double, pas un objet de type Date. J'ai besoin d'elle pour être à jour() de l'utc. avoir un temps horrible avec cette. merci pour l'aide!
- Je demande encore une fois, ce qui rompt lorsque vous stockez des comme ça. Prend-il en charge des dates incorrectes? Est-il rompre dans des fuseaux horaires différents?
- pourquoi, diable, cant je viens de le faire:
var now = moment.utc().toDate();
et magasin 🙁 - pas sûr de ce que tu veux dire par
as is
- parce qu'il va dans un lit double dans mongo, je veux qu'il soit de type
Date
- Votre manque de mon point de. Il n'y a pas moyen de traiter avec le double? Est le double pas valide?
- Je vous ai compris assez bien. Doit être natif Javascript type d'objet
- Mongo utilise BFILS. Il faut convertir les objets JS en compatible les types de stockage. si vous êtes à l'aide de mongo mal, vous allez probablement avoir à convertir des dates de retour dans la date objets vous-même.
- ainsi quel est la réponse à ma question d'origine? 🙂
- le jour, () une fonction semble tout convertir fuseau horaire local
- Essayez
new Date(moment.utc().toDate())
Vous devez vous connecter pour publier un commentaire.
Un timestamp est un point dans le temps. Typiquement, cela peut être représentée par un nombre de millisecondes passé un epoc (Unix Epoc de 1 Jan 1970 12H UTC). Le format de ce point dans le temps dépend du fuseau horaire. Alors que c'est la même point dans le temps, les heures de la valeur" n'est pas la même entre les fuseaux horaires et l'on doit prendre en compte le décalage à partir de la UTC.
Voici un peu de code pour illustrer. D'un point de temps est saisie de trois façons différentes.
Qui sort ce:
En termes de millisecondes, chacun sont les mêmes. C'est exactement le même point dans le temps (bien que, dans certains passages, les plus tard, à la milliseconde est un plus).
Aussi loin que le format peut être représenté dans un fuseau horaire particulier. Et la mise en forme de fuseau horaire avais chaîne est différent, exactement au même point dans le temps!
Allez-vous comparer ces valeurs de temps? Il suffit de convertir en millisecondes. Une valeur en millisecondes, est toujours inférieure, égale ou supérieure à une autre valeur en millisecondes.
Vous voulez comparer spécifique "heure" ou "journée" valeurs et inquiet de savoir qu'il "venait de" fuseaux horaires différents? Convertir au format UTC première utilisation de
moment.utc( existingDate )
, puis effectuez les opérations. Des exemples de ces transformations, à la sortie de la DB, ce sont les dernièresconsole.log
appels dans l'exemple.Appelant à jour permettra de créer un copie (la documentation est en bas à droite de mal à cela ne soit pas une copie), de la sous-JS l'objet Date. JS Date objet est stocké dans l'UTC et sera toujours l'impression d'heure de l'est. Sans entrer dans de si .utc() modifie l'objet sous-jacent de ce moment, enveloppements d'utiliser le code ci-dessous.
Vous n'avez pas besoin du moment pour cela.
Cela fonctionne, parce que JS Date à sa base est en UTC depuis l'Époque Unix. C'est extraordinairement confus et je crois une grosse faille dans l'interface de mélanger locale et l'heure UTC fois comme ça avec aucun des descriptions dans les méthodes.
Ou tout simplement:
Date.now
De MDN documentation:
Disponible depuis ECMAScript 5.1
C'est la même chose comme il a été mentionné ci-dessus (
new Date().getTime()
), mais plus shortcutted version.