Les dates php
Fermé
emi
-
1 juin 2010 à 15:48
ChrisCompote Messages postés 73 Date d'inscription mardi 8 juin 2010 Statut Membre Dernière intervention 19 juin 2010 - 18 juin 2010 à 09:42
ChrisCompote Messages postés 73 Date d'inscription mardi 8 juin 2010 Statut Membre Dernière intervention 19 juin 2010 - 18 juin 2010 à 09:42
A voir également:
- Les dates php
- Easy php - Télécharger - Divers Web & Internet
- Calcul nombre de nuits entre deux dates excel ✓ - Forum Excel
- \R php ✓ - Forum PHP
- Bouton php - Forum PHP
- Php?id=1 - Forum PHP
2 réponses
ChrisCompote
Messages postés
73
Date d'inscription
mardi 8 juin 2010
Statut
Membre
Dernière intervention
19 juin 2010
8
8 juin 2010 à 22:37
8 juin 2010 à 22:37
$date1 = "04/06/2010 09:00";
$date2 = "07/06/2010 23:00";
$date1 = datetounixtime($date1);
$heure1 = $date1['h'];
$date1 = $date1['date'];
$date2 = datetounixtime($date2);
$heure2 = $date2['h'];
$date2 = $date2['date'];
//numero de semaine 1
$w1 = date('W',$date1);
//numero de semaine 2
$w2 = date('W',$date2);
$jsem1 = date('N',$date1);
//si la premier jour est dans un week end,
if($jsem1 == 6) //samedi
{
$decal1 = 0; //le décalage ne sert plus, c'est un week end
$date1 += 2 * 24 * 3600; //on décale la date de 2 jours (le lundi)
$w1 += 1;
}
if($jsem1 == 7) //dimanche
{
$decal1 = 0; //le décalage ne sert plus, c'est un week end
$date1 += 1 * 24 * 3600; //on décale la date de 1 jour (le lundi)
$w1 += 1;
}
$jsem2 = date('N',$date2);
//si la premier jour est dans un week end,
if($jsem2 == 6) //samedi
{
$decal1 = 8; //le décalage est mis à 8h, on décale au vendredi à 0h mais celui ci compte (il a 8h)
$date2 -= 1 * 24 * 3600; //on décale la date de 2 jours (le vendredi)
$w2 -= 1; //on enleve une semaine pour ne pas compter le we de cet semaine
}
if($jsem2 == 7) //dimanche
{
$decal2 = 16; //idem
$date1 -= 2 * 24 * 3600; //on décale la date de 2 jour (le vendredi)
$w2 -= 1;
}
if($jsem1 < 6)
{
//on compte toute la journée, on calcule combien d'heure faut enlever
$decal1 = 12; //12h de 0h à 8h et 20hà 0h
if($heure1 >= 8)
$decal1 -= ($heure1 - 8);
if($heure1 >= 20)
$decal1 = 0; // on enlève les 12h restantes
$heure1 = $decal1;
$date1 = $date1 + 24 * 3600; //1ere journée etant calculé
}
if($jsem2 < 6)
{
$decal2 = $heure2;
if($heure2 <= 8)
$decal2 = 0;//on enlève les 8h du début de journée
if($heure2 > 8)
$decal2 = ($heure2 - 8);
if($heure2 >= 20)
$decal2 -= ($heure2 - 20);
$heure2 = $decal2;
//$date2 = $date2 - 24 * 3600; //derniere journée calculé
}
//le nombre de we
$nwe = $w2 - $w1;
//on a ici les temps unix avec le décalage
$diff = $date2 - $date1;
//les heures de 20h à 8h équivaut à enlever 12h par jour
$heures = ($heure1 + $heure2) * 3600;
$diff = $diff - ($nwe * 2 * 24 * 3600) + $heures;
print $diff / 3600;
J'ai 23 comme résultat, ce qui est correct, 11h le premier jour, 12h le 2e et un week end entre
$date2 = "07/06/2010 23:00";
$date1 = datetounixtime($date1);
$heure1 = $date1['h'];
$date1 = $date1['date'];
$date2 = datetounixtime($date2);
$heure2 = $date2['h'];
$date2 = $date2['date'];
//numero de semaine 1
$w1 = date('W',$date1);
//numero de semaine 2
$w2 = date('W',$date2);
$jsem1 = date('N',$date1);
//si la premier jour est dans un week end,
if($jsem1 == 6) //samedi
{
$decal1 = 0; //le décalage ne sert plus, c'est un week end
$date1 += 2 * 24 * 3600; //on décale la date de 2 jours (le lundi)
$w1 += 1;
}
if($jsem1 == 7) //dimanche
{
$decal1 = 0; //le décalage ne sert plus, c'est un week end
$date1 += 1 * 24 * 3600; //on décale la date de 1 jour (le lundi)
$w1 += 1;
}
$jsem2 = date('N',$date2);
//si la premier jour est dans un week end,
if($jsem2 == 6) //samedi
{
$decal1 = 8; //le décalage est mis à 8h, on décale au vendredi à 0h mais celui ci compte (il a 8h)
$date2 -= 1 * 24 * 3600; //on décale la date de 2 jours (le vendredi)
$w2 -= 1; //on enleve une semaine pour ne pas compter le we de cet semaine
}
if($jsem2 == 7) //dimanche
{
$decal2 = 16; //idem
$date1 -= 2 * 24 * 3600; //on décale la date de 2 jour (le vendredi)
$w2 -= 1;
}
if($jsem1 < 6)
{
//on compte toute la journée, on calcule combien d'heure faut enlever
$decal1 = 12; //12h de 0h à 8h et 20hà 0h
if($heure1 >= 8)
$decal1 -= ($heure1 - 8);
if($heure1 >= 20)
$decal1 = 0; // on enlève les 12h restantes
$heure1 = $decal1;
$date1 = $date1 + 24 * 3600; //1ere journée etant calculé
}
if($jsem2 < 6)
{
$decal2 = $heure2;
if($heure2 <= 8)
$decal2 = 0;//on enlève les 8h du début de journée
if($heure2 > 8)
$decal2 = ($heure2 - 8);
if($heure2 >= 20)
$decal2 -= ($heure2 - 20);
$heure2 = $decal2;
//$date2 = $date2 - 24 * 3600; //derniere journée calculé
}
//le nombre de we
$nwe = $w2 - $w1;
//on a ici les temps unix avec le décalage
$diff = $date2 - $date1;
//les heures de 20h à 8h équivaut à enlever 12h par jour
$heures = ($heure1 + $heure2) * 3600;
$diff = $diff - ($nwe * 2 * 24 * 3600) + $heures;
print $diff / 3600;
J'ai 23 comme résultat, ce qui est correct, 11h le premier jour, 12h le 2e et un week end entre
ChrisCompote
Messages postés
73
Date d'inscription
mardi 8 juin 2010
Statut
Membre
Dernière intervention
19 juin 2010
8
10 juin 2010 à 21:39
10 juin 2010 à 21:39
Plus simplement :
$date1 = "07/06/2010 09:00"; $date2 = "08/06/2010 08:00"; $date1 = datetounixtime($date1); $heure1 = $date1['h']; $date1 = $date1['date']; $date2 = datetounixtime($date2); $heure2 = $date2['h']; $date2 = $date2['date']; //numero de semaine 1 $w1 = date('W',$date1); //numero de semaine 2 $w2 = date('W',$date2); $jsem1 = date('N',$date1); //si la premier jour est dans un week end, if($jsem1 >= 6) //samedi dimandhe $heure1 = 0; $jsem2 = date('N',$date2); //si la premier jour est dans un week end, if($jsem2 >= 6) //samedi dimanche $heure2 = 0; if($jsem1 < 6) { //on compte toute la journée, on calcule combien d'heure faut enlever $decal1 = 12; //12h de 0h à 8h et 20hà 0h if($heure1 >= 8) $decal1 -= ($heure1 - 8); if($heure1 >= 20) $decal1 = 0; // on enlève les 12h restantes $heure1 = $decal1; $date1 = $date1 + 24 * 3600; //1ere journée etant calculé } if($jsem2 < 6) { $decal2 = $heure2; if($heure2 <= 8) $decal2 = 0;//on enlève les 8h du début de journée if($heure2 > 8) $decal2 = ($heure2 - 8); if($heure2 >= 20) $decal2 -= ($heure2 - 20); $heure2 = $decal2; } //le nombre de we $nwe = $w2 - $w1; //on a ici les temps unix avec le d?calage $diff = $date2 - $date1; //les heures de 20h à 8h équivaut à enlever 12h par jour $heures = ($heure1 + $heure2) * 3600; $diff = ($diff - ($nwe * 2 * 24 * 3600))/2 + $heures; print $diff / 3600; function datetounixtime($date) { preg_match("/([0-9]{2}).([0-9]{2}).([0-9]{4}) ([0-9]{2}).([0-9]{2})/",$date,$matches); //date fr à date en $date = $matches[3].'-'.$matches[2].'-'.$matches[1]; $heure = (int)$matches[4]; $min = (int)$matches[5]; //conversion en temps unix avec mise à 0 de l'heure pour les calculs $date = strtotime($date.' 00:00'); return array('date'=>$date,'h'=>$heure,'m'=>$min); }
ChrisCompote
Messages postés
73
Date d'inscription
mardi 8 juin 2010
Statut
Membre
Dernière intervention
19 juin 2010
8
11 juin 2010 à 13:16
11 juin 2010 à 13:16
commente
et c'est - $heures au lieu de +
$date1 = $date1 + 24 * 3600;
et c'est - $heures au lieu de +
$diff = ($diff - ($nwe * 2 * 24 * 3600))/2 - $heures;
Chris ca reste +$heurs pour obtenir la bonne resultat mais
si on declare les dates
$date1 = "01/06/2010 09:00";
$date2 = "19/06/2010 08:00"
on aura pas la meme resultat normalement ca doit rester 168 mais je trouve 156
ca veut dire (168-12)=156
merci beaucoup Chris pour tes reponses vraiment j ai besoin de ca
si on declare les dates
$date1 = "01/06/2010 09:00";
$date2 = "19/06/2010 08:00"
on aura pas la meme resultat normalement ca doit rester 168 mais je trouve 156
ca veut dire (168-12)=156
merci beaucoup Chris pour tes reponses vraiment j ai besoin de ca
ChrisCompote
Messages postés
73
Date d'inscription
mardi 8 juin 2010
Statut
Membre
Dernière intervention
19 juin 2010
8
15 juin 2010 à 15:41
15 juin 2010 à 15:41
c'est moins non parce que je prend en compte la journée entière (dc 8h) auxquels il faut enlever la différence entre 8h du matin et l'heure réel de début
8 juin 2010 à 23:18
function datetounixtime($date)
{
preg_match("/([0-9]{2}).([0-9]{2}).([0-9]{4}) ([0-9]{2}).([0-9]{2})/",$date,$matches);
//date fr à date en
$date = $matches[3].'-'.$matches[2].'-'.$matches[1];
$heure = (int)$matches[4];
$min = (int)$matches[5];
//conversion en temps unix avec mise à 0 de l'heure pour les calculs
$date = strtotime($date.' 00:00');
return array('date'=>$date,'h'=>$heure,'m'=>$min);
}
10 juin 2010 à 11:19
je peux laisser le choix à l utilisateur pour changer l heure de debut et de fin ca veut dire la période de 8h au 20h
10 juin 2010 à 12:27
$date1 = "05/06/2010 09:00";
$date2 = "05/06/2010 09:00";
il revoie toujours 42?????????????