web-dev-qa-db-fra.com

Conversion Moment.js et Unix Epoch

J'ai un service Web qui renvoie une date sous la forme de la chaîne suivante:

/Date(1377907200000)/

J'utilise MomentJS pour analyser ceci vers un objet moment.

moment("/Date(1377907200000)/") => Fri Aug 30 2013 20:00:00 GMT-0400

Tout ça va bien. Mais quand j'appelle unix() sur l'objet, on me donne la valeur 1377907200. Cela correspond cependant à Fri Jan 16 1970 17:45:07 GMT-0500. Je pourrais simplement multiplier la valeur renvoyée par unix() mais cela me semble bâclé. Je soupçonne que ce que je fais en appelant unix() n'est pas exactement ce que je pense. Dois-je spécifier une sorte de format lors de l'appel de unix()? Qu'est-ce que j'oublie ici?

JSFidle montrant la conversion en moment puis en arrière.

16
Robert Kaucher

La réponse fournie par meagar est correcte, strictement dans une perspective temporelle JavaScript/Unix. Cependant, si vous multipliez simplement par 1 000, vous perdrez toute précision d'une sous-seconde qui aurait pu exister dans vos données.

Moment.js propose deux méthodes différentes, comme décrit dans la documentation . .unix() renvoie la valeur en secondes. Il divise efficacement par 1000 et tronque toutes les décimales. Vous souhaitez utiliser la méthode .valueOf(), qui renvoie simplement les millisecondes sans modification.

50
Matt Johnson-Pint

En JavaScript, lorsque vous convertissez un Date en un entier, vous obtenez un certain nombre de millisecondes depuis l'époque unix. Le temps Unix traditionnel est le nombre de secondes depuis l'époque. La multiplication par 1000 est la bonne option.

10
meagar