Bonjour,
Je cherche une méthode fiable qui
me renvoie une date par rapport à une date donnée.
Par exemple :
datedépart -> '12.12.1954' -21 jours -8 mois -1 an me donne la date du '21.03.1953', c'est bien ce que je dois trouver.
Par contre, le contraire, c'est à dire :
datedépart -> '21.03.1953' +21 jours +8 mois +1 an me donne la date du '11.12.1954' et pas '12.12.1954' que je voudrais trouvé.
Ci-dessous la fonction php que j'ai créé :
Merci de me dire ou se trouve ce qui ne marche pas.
Etant un spécialiste du langage RPG ILE, voila comment je coderais:
Cela marche dans tous les sens en + ou en - ou en + et -.
CàD : jour = 21; ou jour = -21, etc..., on peut donc tout mélanger jour, mois, annee en + ou en -, le résultat sera toujours juste.
Je cherche une méthode fiable qui
me renvoie une date par rapport à une date donnée.
Par exemple :
datedépart -> '12.12.1954' -21 jours -8 mois -1 an me donne la date du '21.03.1953', c'est bien ce que je dois trouver.
Par contre, le contraire, c'est à dire :
datedépart -> '21.03.1953' +21 jours +8 mois +1 an me donne la date du '11.12.1954' et pas '12.12.1954' que je voudrais trouvé.
Ci-dessous la fonction php que j'ai créé :
<?php
function dif_date($date,$d=0,$m=0,$y=0) {
$date = new DateTime($date);
$jr = $date->format('d');
$mo = $date->format('m');
$l = $date->format('L');
If ($l == 1 && $d == '29'):
If ($m == -1):
$d = -29;
EndIf;
EndIf;
If ($l == 0 && $d == '28'):
If ($m == -1):
$d = -28;
EndIf;
EndIf;
If ($d >= 0):
$r = $date->add(new DateInterval('P'.$d.'D'));
Else:
$r = $date->sub(new DateInterval('P'.abs($d).'D'));
EndIf;
If ($m >= 0):
$r = $date->add(new DateInterval('P'.$m.'M'));
Else:
$r = $date->sub(new DateInterval('P'.abs($m).'M'));
EndIf;
If ($y >= 0):
$r = $date->add(new DateInterval('P'.$y.'Y'));
Else:
$r = $date->sub(new DateInterval('P'.abs($y).'Y'));
EndIf;
$r->format('d.m.Y');
return $r;
}
?>
Merci de me dire ou se trouve ce qui ne marche pas.
Etant un spécialiste du langage RPG ILE, voila comment je coderais:
/free
dated = 21.03.1953;
jour = 21;
mois = 8;
annee = 1;
datef = dated + %days(jour) + %months(mois) + %years(annee);
/end-free
Cela marche dans tous les sens en + ou en - ou en + et -.
CàD : jour = 21; ou jour = -21, etc..., on peut donc tout mélanger jour, mois, annee en + ou en -, le résultat sera toujours juste.