DIFFÉRENCE ENTRE DEUX DATE EN JOURS (LISTE RÉCUPÉRÉE DANS UN TABLEAU)

Waredan Messages postés 22 Date d'inscription vendredi 8 janvier 2010 Statut Membre Dernière intervention 19 février 2010 - 17 févr. 2010 à 16:25
perruche1 Messages postés 4 Date d'inscription samedi 23 février 2013 Statut Membre Dernière intervention 23 février 2013 - 28 sept. 2010 à 07:57
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/51309-difference-entre-deux-date-en-jours-liste-recuperee-dans-un-tableau

perruche1 Messages postés 4 Date d'inscription samedi 23 février 2013 Statut Membre Dernière intervention 23 février 2013
28 sept. 2010 à 07:57
Bonjour,
Etant plus (ou moins) que nul en programmation php, je voudrai avoir un formulaire sur mon site ou une personne rentre une date (ou, à défaut qui affiche la date actuelle), et qui calcule et montre automatiquement cette date + 18 jours. Je comprends que cela vous semble un peu bizarre ; c'est simplement dans le cadre d'élevage d'oiseaux, pour prédire la date d'éclosion en fonction de la date de ponte d'un oeuf...

Un grand merci d'avance pour celui ou ceux qui veulent m'aider
questre78 Messages postés 2 Date d'inscription jeudi 25 janvier 2007 Statut Membre Dernière intervention 22 février 2010
22 févr. 2010 à 10:11
salut moi j'utilise cette fonction (une période sur deux ans ou un an )
function generate_Period($planification=array('year1'=>'', 'month1'=>'', 'day1'=>'', 'year2'=>'', 'month2'=>'','day2'=>'','day_of_cours'=>''))
{

$annee =$planification['year1'];
$premiermois =$planification['month1'];
$premierjour =$planification['day1'];
$anneeF =$planification['year2'];
$derniermois =$planification['month2'];
$deuxiemejour =$planification['day2'];
$day =$planification['day_of_cours'];

$planification="planification";
if (!isset ($derniermois)){$derniermois=12;}
if (!isset ($premiermois)){$premiermois=1;}
$day_in_french=array('Sun'=>'Dim', 'Mon'=>'Lun', 'Tue'=>'Mar', 'Wed'=>'Mer', 'Thu'=>'Jeu', 'Fri'=>'Ven', 'Sat'=>'Sam');

print " <tr> \n";
$k=0;
if ($annee==$anneeF && $premiermois<=$derniermois)
{
if ($premiermois==$derniermois && $premierjour>$deuxiemejour)
{
return "erreur";
}
$moisfinannee=$derniermois;
}
else
{
$moisfinannee=12;
}
for($indexmois=$premiermois;$indexmois<=$moisfinannee;$indexmois++)
{
$nbrJourduMois[$annee][$indexmois]=Date("t", mktime(0, 0, 0, $indexmois,1, $annee));
$month=Date("m", mktime(0, 0, 0, $indexmois,1, $annee));

for($indexjour=$premierjour;$indexjour<$nbrJourduMois[$annee][$indexmois];$indexjour++)
{
//(Date("w", mktime(0, 0, 0, $indexmois,$indexjour, $annee))==$day) ?$k++:print"";
if (Date("w", mktime(0, 0, 0, $indexmois,$indexjour, $annee))==$day)
{
$k++;
print '<td>'.$day_in_french[date("D", mktime(0, 0, 0, $month,$indexjour, $annee))]." ".date("d/m/Y", mktime(0, 0, 0, $month,$indexjour, $annee))."</td>\n";
if ($k%4==0)
{
print "</tr><tr>\n";
}
}

}
}

if ($anneeF>$annee)
{

for($indexmois1=1;$indexmois1<=$derniermois;$indexmois1++)
{
$nbrJourduMois[$anneeF][$indexmois1]=Date("t", mktime(0, 0, 0, $indexmois1,1, $anneeF));
$month=Date("m", mktime(0, 0, 0, $indexmois1,1, $anneeF));
for($indexjour1=1;$indexjour1<$nbrJourduMois[$anneeF][$indexmois1];$indexjour1++)
{
if (Date("w", mktime(0, 0, 0, $indexmois1,$indexjour1, $anneeF))==$day)
{
$k++;

print '<td>'.$day_in_french[date("D", mktime(0, 0, 0, $month,$indexjour1, $anneeF))]." ".date("d/m/Y", mktime(0, 0, 0, $month,$indexjour1, $anneeF))."</td>\n";
if ($k%4==0)
{
print "</tr><tr>\n";
}
}

}
}
}
print " </tr>";
}
cs_nashouille Messages postés 21 Date d'inscription mardi 16 mars 2004 Statut Membre Dernière intervention 11 juillet 2008
19 févr. 2010 à 17:26
Pour prendre les dates dans les deux format

<?php
date_default_timezone_set('Europe/Paris');

function liste_jours($date_debut, $date_fin) {

$date_suite = array($date_debut, $date_fin);

foreach($date_suite as $key => $value){

if(!($date = date_create($value)))
return false;

list($annee, $mois, $jour) = explode("-", date_format($date,'Y-m-d'));
$date_suite[$key] = mktime(0,0,0, $mois, $jour, $annee);
}

$nbrJours = (int)(($date_suite[1]-$date_suite[0])/86400);

for($i = 0; $i <= $nbrJours; $i++)
$date_suite[$i] = date('Y-m-d', strtotime("+$i day ".$date_debut));

return $date_suite;
}
?>
Waredan Messages postés 22 Date d'inscription vendredi 8 janvier 2010 Statut Membre Dernière intervention 19 février 2010
19 févr. 2010 à 12:59
Y-m-d, cela va de soi ..
Waredan Messages postés 22 Date d'inscription vendredi 8 janvier 2010 Statut Membre Dernière intervention 19 février 2010
19 févr. 2010 à 12:59
Tu as lu les commentaires précédents ? Si tu veux utiliser un format différent, je te conseille de reprendre ma fonction donnée en commentaire #1 .. remplace "d/m/Y" par "Y-d-d" ..
cs_nashouille Messages postés 21 Date d'inscription mardi 16 mars 2004 Statut Membre Dernière intervention 11 juillet 2008
19 févr. 2010 à 12:39
je viens de testé ta fonction directement avec une extraction MySQL.
Le champs que je test est de type date et non datetime comme tu le précise.

et voici ce qui en ressort avec ce test:
$Liste_Date=liste_jours('2010-12-01','2010-12-15');
for($i = 0; $i < count($Liste_Date); $i++)
echo $Liste_Date[$i]."
";

une boucle du 2010-12-01 au 2024-11-30

merci
Waredan Messages postés 22 Date d'inscription vendredi 8 janvier 2010 Statut Membre Dernière intervention 19 février 2010
19 févr. 2010 à 12:13
C'est pas trop le sujet qui est en question ici ...

<?php
// Dans ta base de donnée, tu as un champ nommé "date", de type "datetime".
// Supposant que "$date" provient de ce champ...
$date = '2010-02-16 11:40:00';
$date = date_create($date);
echo $date->format('Y-m-d');
?>
cs_nashouille Messages postés 21 Date d'inscription mardi 16 mars 2004 Statut Membre Dernière intervention 11 juillet 2008
19 févr. 2010 à 12:03
salut

Comment fait-on avec les extractions de date MySQL au format yyyy-mm-dd ?

merci
DevilTN Messages postés 8 Date d'inscription mardi 4 mars 2008 Statut Membre Dernière intervention 17 avril 2010
17 févr. 2010 à 16:50
Concernant la prise en charge du TimeZone
J’utilise souvent cette fonction :

function Convert_time_to_US($DateCH)
{
$dateTime=date_create($DateCH,timezone_open('Europe/Zurich'));
$DateTimeZone=timezone_open('America/Los_Angeles');
date_timezone_set($dateTime,$DateTimeZone);
return(date_format($dateTime,"Y-m-d H:i:s"));
}

Tu peux simplement la modifier :)
Waredan Messages postés 22 Date d'inscription vendredi 8 janvier 2010 Statut Membre Dernière intervention 19 février 2010
17 févr. 2010 à 16:25
Salut, voici le même avec prise en charge du timezone et du format d'affichage souhaité, PHP 5 >= 5.2.0 requis.

<?php
date_default_timezone_set('Europe/Paris');

function liste_jours($deb, $fin = 'now') {
$dt = date_create($deb);
$diff = $dt->diff(date_create($fin));

$arr = array();

for ($i = 0; $i < $diff->d; $i++)
$arr[] = clone $dt->modify('+' . $i . ' day');

return $arr;
}

foreach (liste_jours('01-12-2010', '15-12-2010') as $dt)
echo $dt->format('d/m/Y') . PHP_EOL;
?>
Rejoignez-nous