À l'aide de momentjs pour convertir la date à l'époque, puis de nouveau à jour
Je suis en train de convertir une date en chaîne de caractères à l'époque, puis de l'époque à compter de la date de chaîne pour vérifier que je suis fournissant la date correcte de la chaîne.
var epoch = moment("10/15/2014 9:00").unix(); //do I need to do .local()?
var momentDate = moment(epoch); //I've also tried moment.utc(epoch)
var momentDateStr = momentDate.calendar();
alert("Values are: epoch = " + epoch + ", momentDateStr = " + momentDateStr);
Rend
Values are: epoch = 1413378000, momentDateStr = 01/17/1970
Note: j'utilise la version suivante du moment js script, //cdnjs.cloudflare.com/ajax/libs/moment.js/2.8.3/moment-with-locales.js
- Je reçois cet avertissement pour la première ligne: la Dépréciation avertissement: le moment de la construction revient à js Date. Ceci est découragé et sera supprimée dans la prochaine version majeure. Veuillez consulter la github.com/moment/moment/issues/1407 pour plus d'info.
Vous devez vous connecter pour publier un commentaire.
Il y a quelques choses qui cloche ici:
Tout d'abord, la terminologie. "Epoch" désigne le point de départ de quelque chose. "L'Époque Unix" est Minuit, le 1er janvier 1970 UTC. Vous ne pouvez pas convertir arbitraire "chaîne de date à l'époque". Vous signifiait probablement "Le Temps Unix", ce qui est souvent appelé à tord "Époque".
.unix()
retourne Unix Temps en secondes entières, mais la valeur par défautmoment
constructeur accepte un timestamp dans millisecondes. Vous devez utiliser à la place.valueOf()
de retour millisecondes. Noter que l'appel.unix()*1000
également de travailler, mais il en résulterait une perte de précision.Vous êtes à l'analyse une chaîne sans fournir un spécificateur de format. Ce n'est pas une bonne idée, car les valeurs comme le 1/2/2014 pourrait être interprété comme étant soit le 1er ou le 2 janvier, selon les paramètres régionaux de l'endroit où le code est en cours d'exécution. (C'est aussi pourquoi vous obtenez la désapprobation d'avertissement dans la console.) Au lieu de cela, fournir un chaîne de format qui correspond à l'entrée attendue, tels que:
.calendrier()
a un usage très spécifique. Si vous êtes à proximité de la date, il sera de retour une valeur comme "aujourd'Hui, 9:00 AM". Si ce n'est pas ce que vous attendiez, vous devez utiliser le.format()
fonction de la place. Encore une fois, vous pouvez vous passer d'un spécificateur de format.Pour répondre à vos questions dans les commentaires, les Non - vous n'avez pas besoin d'appeler
.local()
ou.utc()
.Mettant tous ensemble:
Sur ma machine, NOUS fuseau horaire du Pacifique, il en résulte:
Depuis l'entrée de la valeur est interprétée en termes de temps local, vous obtiendrez une valeur différente pour
ts
si vous êtes dans un autre fuseau horaire.Notez également que si vous avez vraiment envie de travailler avec l'ensemble de secondes (peut-être perdre de précision), le moment a des méthodes pour cela. Vous utilisez
.unix()
pour revenir le temps en secondes entières, etmoment.unix(ts)
pour analyser de nouveau à un moment..valueOf()
->+moment()
http://momentjs.com/docs/#/displaying/unix-timestamp/
Vous obtenez le nombre de unix secondes, pas millisecondes!
Vous vous devez de le multiplier avec 1000 ou à l'aide de
valueOf()
et n'oubliez pas d'utiliser un module de formatage, puisque vous n'utilisez pas un format ISO 8601. Et si vous oubliez de passer le formateur, la date sera analysée dans le fuseau horaire UTC ou comme une date non valide.valueOf()