Jour d'une date

Résolu
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

  1. Modérateur
    Bonjour,

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

    1. 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.
    2. Modérateur
      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
    3. @jordane45Oui, 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
    4. Modérateur
      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 ...
    5. @jordane45Voici 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 ?