Jour d'une date

Résolu/Fermé
hcp7kuz Messages postés 243 Date d'inscription mardi 18 août 2015 Statut Membre Dernière intervention 23 mars 2019 - 3 févr. 2018 à 17:14
hcp7kuz Messages postés 243 Date d'inscription mardi 18 août 2015 Statut Membre Dernière intervention 23 mars 2019 - 3 févr. 2018 à 20:28
Bonjour,

Cherchant à manipuler des dates, j'en suis venu à assigner à une date une valeur en milliseconde.
J'ai ainsi remarqué une incohérence que je n'explique pas, à partir de ce code :

var dateMilis = (2018 - 1970) * 31536000 + 02 * 2592000 + 3 * 86400 + 16 * 3600 + 51 * 60 + 3;
var testDate = new Date(dateMilis * 1000);
console.log(testDate.getDate());

Dans la console, le jour affiché est le 21.

var dateMilis = (2018 - 1970) * 31536000 + 02 * 2592000 + (3 - 18) * 86400 + 16 * 3600 + 51 * 60 + 3;

Avec ce code, le jour affiché est bien le 3.
Pourquoi y a-t-il un décalage de 18 jours ?

Merci pour votre aide,
hcp7kuz

1 réponse

jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
3 févr. 2018 à 17:38
Bonjour,

Sûrement à cause du -18 de ta seconde ligne...
(3 - 18)* 86400

0
hcp7kuz Messages postés 243 Date d'inscription mardi 18 août 2015 Statut Membre Dernière intervention 23 mars 2019 23
Modifié le 3 févr. 2018 à 18:19
Justement, j'ai ajouté dans le deuxième code le - 18 pour palier au problème. Sans celui-ci, le jour affiché est, avec cet exemple, 21.
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
3 févr. 2018 à 18:23
Sachant que le timestamp que tu trouves avec ton calcul correspond au 21


(2018 - 1970) * 31536000 + 2 * 2592000 + 3 * 86400 + 16 * 3600 + 51 * 60 + 3 => 1519231863


Si on fait la conversion : timestamp à convertir : 1519231863
résultat : le 21/2/2018 à 17:51:03
0
hcp7kuz Messages postés 243 Date d'inscription mardi 18 août 2015 Statut Membre Dernière intervention 23 mars 2019 23 > jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024
3 févr. 2018 à 18:37
Oui, et c'est justement ça le problème. J'aurais voulu avoir un calcul de la forme suivante pour obtenir un timestamp correspondant à la date correcte :
(année - 1970) * 31536000 + mois * 2592000 + jour * 86400 + heure * 3600 + minutes * 60 + secondes
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
3 févr. 2018 à 19:00
Tu veux le "3" de quelle mois et de quelle année ??
Le 3 Février 2018 à 16h51 et 3sec ?
Il faut donc que ton calcul donne le timestamp

1517673063


Mais... tu as calculé comment les valeurs que tu multiplie aux années / mois .... ??
Sachant qu'il y a des mois à 28 , 30 et 31 jours ... et des années bissextiles ...
0
hcp7kuz Messages postés 243 Date d'inscription mardi 18 août 2015 Statut Membre Dernière intervention 23 mars 2019 23 > jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024
3 févr. 2018 à 19:22
Voici mon calcul pour le timestamp :
(année - 1970) * 365 * 24 * 60 * 60 + mois * 30 * 24 * 60 * 60 + jour * 24 * 60 * 60 + heure * 60 * 60 + minutes * 60 + secondes

Est-ce incorrect ?
0