Bonjour,
presque tout est dans le titre. Je cherche à convertir la date Windows 38363 par exemple (valeur numérique) en une valeur "lisible"
J'ai pas réussi à trouver l'instruction qui va bien
Merci par avance pour l'aide
Jerome
Bonjour,
presque tout est dans le titre. Je cherche à convertir la date Windows 38363 par exemple (valeur numérique) en une valeur "lisible"
J'ai pas réussi à trouver l'instruction qui va bien
Merci par avance pour l'aide
Jerome
Salut, quel est donc ce format ?
Ton exemple 38363 est-il censé correspondre au 29/11/1963 ?
Ca correspond à la date de départ de Windows qui est le 01/01/1900 => 1
. Aujourd'hui c'est par exemple le 38387
Tu l'as dans Excel : Tu entres une date et ensuite tu formates la celleule en standard
J'ai des dates stockées sous cette forme et j'ai besoin de les afficher de manière "intelligible"
merci pour ta réponse
Jerome
Ok, j'avais donc faux, je pensais au jour julien modifié qui commence en 1858, voilà pourquoi je me retrouvais en 1963.
Il a encore fallut qu'ils inventent leur propre format, ca aurait été le jour julien modifié, y'a des formules pour, mais là, je vois pas.
Ou alors calculer par rapport au jour julien modifié la date + difference avec le format excel.
Le probleme residerait dans une determination exacte du nombre de jours entre 1858 et 1900.
Est-ce que ca a l'air de marcher comme ca ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 function ExcelToDate($julian) { $julian = $julian + 2415019; $a = $julian + 32044; $b = floor((4 * $a + 3) / 146097); $c = $a - floor(($b * 146097) / 4); $d = floor((4 * $c + 3) / 1461); $e = $c - floor((1461 * $d) / 4); $m = floor((5 * $e + 2) / 153); $tbDate['day'] = $e - floor((153 * $m + 2) / 5) + 1; $tbDate['mounth'] = $m + 3 - 12 * floor($m / 10); $tbDate['year'] = $b * 100 + $d - 4800 + floor($m / 10); return $tbDate; } print_r(ExcelToDate(38387));
SUper. Merci à tous les 2 pour le coup de main. Ca fonctionne nickel
Bon week end
Jerome
Verifie bien quand meme, avec ces calculs, je trouve que le jour n°1 est le 31/12/1899, soit c'est donc bien sur cette date qu'il se base, soit il y a 1 décalage d'1 jour, il suffirait donc juste de changer $julian = $julian + 2415019; par $julian = $julian + 2415020;
... Soit un truc m'échappe.
A vue de nez, Excel est buggé : il considère que l'année 1900 est bissextile.... Soit un truc m'échappe.
D'où le décallage d'une journée.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 =DATEDIF("01/02/1900";"01/03/1900";"d") => 29 jours =DATEDIF("01/02/1901";"01/03/1901";"d") => 28 jours
Ah bah nous v'là beaux ! Merci jeca, me voilà rassuré.
Il est hors de question de mofifier cette formule pour lui faire accepter un 29 fevrier 1900 qui n'a jammais existé, j'en serais d'ailleurs bien incapable.
Donc la conversion reste bonne sauf pour les dates anterieures au 1er mars 1900, ca devrait suffire.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager