Bonjour chers amis!!!
J'ai un sérieux problème pour le calcul des dates en PHP. Je suis en face d'un problème pour déterminer la durée d'une grossesse à partir d'une date donnée. Je m'explique:
Voici les nominations d'abord:
Pour déterminer la DA, nous devons appliquer la formule suivante:
DA = DDR + 14 jours + 9mois
exemple: Si la date des dernières règles (DDR) ont débuté le 09 février 2023 en considérant que le cycle menstruel est de 28 jours (cycle par défaut), la date d'accouchement (DA) doit être :
DA = 09/02/2023 + 14 jours
ce qui donne 23/02/2023
Février 2023 + 9 mois = Novembre 2023
Donc DA sera le 23/11/2023. Pour faire tout ceci dans un script PHP me pose un grand souci avec le calcul de date en PHP.
NB: On peut aussi vouloir connaître l'évolution de la grossesse en déterminant le nombre par semaine donc le SG semaine de grossesse. comment déterminer le SG à partir d'une date donnée.
Merci pour votre compréhension, j'espère que, après vos réactions, je saurai comment calculer les dates en PHP
Entourez votre code en utilisant "```" pour bien le mettre en forme. (ne copiez pas trop de code)
Bonjour,
En php tu peux manipuler des objets de type DateTime sur lesquels il est possible de faire des calculs.
https://www.php.net/manual/en/class.datetime.php
Voici une façon de calculer la DA à partir d'une DDR :
$ddr = new \DateTime('2023-01-05');
$da = $ddr->add(\DateInterval::createFromDateString("9 months, 14 days"));
echo $da->format("Y-m-d");
Bonjour Gillesr
Merci pour votre intervention, j'essaye ce script tout à l'heure comme ça je vais voir le résultat
Merci beaucoup Gillesr
Mon dernier souci est de determiner le nombre de semaine d'une grossesse, le docteur peut vouloir connaitre entre DDR et la date du jour le nombre de semaine que la grossesse a accumulée. Je suis arrivé à déterminer le nombre de jour mais pour le nombre de semaine, je suis bloqué. Voici quelque bout de code que j'ai réalisé:
$date_verify = $_POST['date_Verify'];
$aujourdhui = $_POST['aujourdhui'];
$diff = date_diff(date_create($date_verify), date_create($aujourdhui));
$success = "<h3>". $diff->format('%d')." jours</h3> ";
Hello :)
Alors une première façon de faire ce serait de diviser le nombre de jours par 7 (7jours, une semaine)
La deuxieme serais de soustraire la semaine de la seconde date dans l'année par la semaine de la première date dans l'année:
$weeks = intval($aujourdhui->format('W')) - intval($date_verify->format('W')); // Format W = numéro de la semaine de l'année de 1 à 53
// Par ex si aujourdhui on est à la 10eme semaine de l'année, et le date_verify à 7 semaines de l'année, 10 - 7 ça fait 3semaines
// Si le date_verify se passe APRES aujourd'hui alors inverses les variables :p
Bonjour Popotte!!!
Merci pour votre intervention.
en utilisant l'exemple que vous avez proposé, il me renvoit cette erreur là :
$date_verify = $_POST['date_verify'];
$weeks = intval($aujourdhui->format('W')) - intval($date_verify->format('W'));
Fatal error: Uncaught Error: Call to a member function format() on string in C:
Error: Call to a member function format() on string in C```
De rien ;)
Okay alors format ne fonctionne que avec une intance Date ou DateTime, et tes variables $aujourdhui et $date_verify ce sont des string
Alors faudrait générer des dates comme ça:
// D'abord ont modifie la nature des deux variables en date
$aujourdhui = strtotime($aujourdhui);
$date_verify = strtotime($date_verify);
// Ensuite on remodifie la variable en semaine de l'année, puis ont récupère la valeur en integer avec intval
$weeks = intval(date('W', $aujourdhui)) - intval(date('W', $date_verify));
Bien faire attention si ça commence vers la fin de l'année :
<?php
$aujourdhui = strtotime('2021-12-31');
$date_verify = strtotime('2022-01-10'); // 11 jours plus tard
// Ensuite on remodifie la variable en semaine de l'année, puis ont récupère la valeur en integer avec intval
echo intval(date('W', $aujourdhui)) - intval(date('W', $date_verify));
// donne 50 semaines
La division par 7 me semble bien :
$aujourdhui = new DateTimeImmutable('2021-12-31');
$date_verify = new DateTimeImmutable('2022-01-10');
$diff = $aujourdhui->diff($date_verify);
$weeks = floor($diff->days / 7); // donne 1 semaine
Et si aujourd'hui
se trouve après date_verify
alors ça marche quand même :
$aujourdhui = new DateTimeImmutable('2022-02-28');
$date_verify = new DateTimeImmutable('2022-01-10');
$diff = $aujourdhui->diff($date_verify);
$weeks = floor($diff->days / 7); // 7 semaines
Bonsoir chers amis, merci JoolsMcFly pour votre intervention, j'essaye ça toute de suite. Toutes les propositions me seront les bienvenues