Date de traitement incorrect de date Unix (ou j’utilise incorrectement la date?)

J’ai la structure de données suivante. La première colonne est des intervalles. La première ligne de l’intervalle de données est un temps unix et les données suivantes sont des intervalles (par exemple 300 * 1, 300 * 2, ect). L’autre colonne contient les valeurs de données. Voici la tête des données:

a1521207300,555.45 1,554.53 2,554.07 3,553.9 4,552.67 

Et là, je suis allé sur la conversion de l’heure unix en un object Date . Le a ici est ornemental, donc je slice() à 1 comme ça:

  var rawTime = data[0].interval; var timeValue = Math.round(rawTime.slice(1)); console.log(timeValue) console.log(new Date(timeValue)) 

J’ai aussi essayé d’utiliser parseInt() au lieu de round() . La console montre que ce temps unix est équivalent à: Jan 18 1970 ce qui me faisait tout à fait rire. Ensuite, j’ai réfléchi, peut-être que j’ai fait quelque chose de mal. C’est censé être une date très récente – le 16 mars 2018. C’est étrange parce que je crois que javascript peut être passé une date unix directement selon cette réponse .

J’ai également vérifié l’heure unix sur un site de conversion: www.onlineconversion.com/unix_time.htm

Ce qui confirme qu’il s’agit bien d’un horodatage du 16 mars 2018.

Question: Pourquoi cette date pour les données de mars 2018 est-elle traitée comme une date de 1970? Peut-être que le a fait quelque chose après tout … De toute façon, quelle est la bonne façon de gérer cet horodatage? Il ne comporte que 10 chiffres, cela ne semble pas être un problème de précision. Date peut gérer des temps unix jusqu’à 13 chiffres, je crois.

Selon la documentation , lorsque vous appelez new Date(value) avec une valeur entière, il est utilisé comme nombre de millisecondes depuis le 1er janvier 1970. Pour obtenir la date souhaitée, la valeur 1521207300 semble être le nombre de secondes au lieu de millisecondes. C’est-à-dire que vous avez manqué un facteur de 1000. new Date(1521207300000) donne vendredi 16 mars 2018.

Quand je retire du nouveau depuis la nouvelle date, ça semble aller. Je ne sais pas pourquoi.

La documentation mentionne les différents comportements:

Remarque: les objects JavaScript Date ne peuvent être instanciés qu’en appelant la date JavaScript en tant que constructeur: l’appel en tant que fonction normale (sans l’opérateur new) renverra une chaîne plutôt qu’un object Date; contrairement aux autres types d’object JavaScript, les objects JavaScript Date n’ont pas de syntaxe littérale.

Il semble que lorsqu’il est appelé comme une fonction Date(value) , il traite la valeur comme le nombre de secondes, au lieu de millisecondes. Je n’ai pas creusé assez profondément pour le confirmer, car ce n’est pas grave: la documentation dit de ne pas l’utiliser de cette façon (et comme elle donne une chaîne au lieu d’un object date, ce n’est pas très utile).