Calcul date et jours fériés
tigre198
Messages postés
55
Statut
Membre
-
tigre198 Messages postés 55 Statut Membre -
tigre198 Messages postés 55 Statut Membre -
Bonjour,
j'ai problème pour ne pas compter des jours comme par exemple 8 mai ou 1 mai.
en effet ce script parcours table et calcul nombre des jours en une semaine mais j'ai besoin de pas compter des jours feriées
j'ai table table_test ou il ya 1 ligne :
date_debut=2008-05-01
date_fin : 2008-05-29
donc resultat c'est
semaine 17 =3
semaine 18=6
semaine 18=6
.....
bien sur je compte pas dimanche a l'aide de fonction sql (WEEK( Date_debut,2))
mais je dois aussi pas compter jours fériées que je dois paramétré et aussiles integré dans boucle for d'ou par exemple si je dois arriver a afficher semaine 17 =2 au lie de 3 vu que je calcule pas 1 mai.
reste ma table peux contenir 1000 lignes.
voiçi le script ou j'utilise a la finc print_r
<?php
$host = 'localhost';
$user = 'root';
$bdd = 'cm';
mysql_connect($host, $user,'') or die("erreur de connexion au serveur");
mysql_select_db($bdd) or die("erreur de connexion a la base de donnees");
$annee = 2008;
// date (mysql type DATE) lundi de cette semaine --> $dateLundi
// date (mysql type DATE) vendredi de cette semaine --> $dateVendredi
// recherche en base des congés chevauchant cette semain
$query = "SELECT "
. "WEEK( Date_debut,2) AS wDebut,DAYOFWEEK( Date_debut ) AS wsDebut,"
. "TO_DAYS( Date_debut) AS dDebut,TO_DAYS( Date_fin ) AS dFin, date_debut, date_fin"
. " FROM tab_test"
. " WHERE YEAR(Date_debut) =" . $annee
. " OR YEAR(Date_fin) =" . $annee ;
//echo '<br>...' . $query;
$result = mysql_query( $query ) or die( mysql_error() );
// réservationtableau pour les nbre de jours par semaine
for( $i=0; $i<53; $i++ )
$nbrJours[ ] = 0;
//$nbrJours1[]=0;
// boucle sur les enregistrements de la table
while( $line = mysql_fetch_array( $result ) )
{
$semaine = $line['wDebut'];
$jourSemaine = $line['wsDebut']; // dimanche = 1
$jourDebut = $line['dDebut'];
$jourFin = $line['dFin'];
$jour1 = $line['date_debut']; // date début congés
$jour2 = $line['date_fin']; // date fin congés
for( $jour = $jourDebut; $jour <= $jourFin; $jour++ )
{
if( $jourSemaine > 1 AND $jourSemaine <= 7 )
$nbrJours[ $semaine]++;
$jourSemaine++;
if( $jourSemaine > 7 )
{
$semaine++; $jourSemaine = 1;
}
}
}
// affichage résultat
echo '<pre>'; print_r( $nbrJours ); echo '</pre>';
?>
merçi d'avance
j'ai problème pour ne pas compter des jours comme par exemple 8 mai ou 1 mai.
en effet ce script parcours table et calcul nombre des jours en une semaine mais j'ai besoin de pas compter des jours feriées
j'ai table table_test ou il ya 1 ligne :
date_debut=2008-05-01
date_fin : 2008-05-29
donc resultat c'est
semaine 17 =3
semaine 18=6
semaine 18=6
.....
bien sur je compte pas dimanche a l'aide de fonction sql (WEEK( Date_debut,2))
mais je dois aussi pas compter jours fériées que je dois paramétré et aussiles integré dans boucle for d'ou par exemple si je dois arriver a afficher semaine 17 =2 au lie de 3 vu que je calcule pas 1 mai.
reste ma table peux contenir 1000 lignes.
voiçi le script ou j'utilise a la finc print_r
<?php
$host = 'localhost';
$user = 'root';
$bdd = 'cm';
mysql_connect($host, $user,'') or die("erreur de connexion au serveur");
mysql_select_db($bdd) or die("erreur de connexion a la base de donnees");
$annee = 2008;
// date (mysql type DATE) lundi de cette semaine --> $dateLundi
// date (mysql type DATE) vendredi de cette semaine --> $dateVendredi
// recherche en base des congés chevauchant cette semain
$query = "SELECT "
. "WEEK( Date_debut,2) AS wDebut,DAYOFWEEK( Date_debut ) AS wsDebut,"
. "TO_DAYS( Date_debut) AS dDebut,TO_DAYS( Date_fin ) AS dFin, date_debut, date_fin"
. " FROM tab_test"
. " WHERE YEAR(Date_debut) =" . $annee
. " OR YEAR(Date_fin) =" . $annee ;
//echo '<br>...' . $query;
$result = mysql_query( $query ) or die( mysql_error() );
// réservationtableau pour les nbre de jours par semaine
for( $i=0; $i<53; $i++ )
$nbrJours[ ] = 0;
//$nbrJours1[]=0;
// boucle sur les enregistrements de la table
while( $line = mysql_fetch_array( $result ) )
{
$semaine = $line['wDebut'];
$jourSemaine = $line['wsDebut']; // dimanche = 1
$jourDebut = $line['dDebut'];
$jourFin = $line['dFin'];
$jour1 = $line['date_debut']; // date début congés
$jour2 = $line['date_fin']; // date fin congés
for( $jour = $jourDebut; $jour <= $jourFin; $jour++ )
{
if( $jourSemaine > 1 AND $jourSemaine <= 7 )
$nbrJours[ $semaine]++;
$jourSemaine++;
if( $jourSemaine > 7 )
{
$semaine++; $jourSemaine = 1;
}
}
}
// affichage résultat
echo '<pre>'; print_r( $nbrJours ); echo '</pre>';
?>
merçi d'avance
A voir également:
- Calcul date et jours fériés
- Nombre de jours entre deux dates excel - Guide
- Compte facebook suspendu 180 jours - Guide
- Calcul km marche à pied gratuit - Télécharger - Sport
- Calcul moyenne excel - Guide
- Calcul charpente bois gratuit - Télécharger - Architecture & Déco
1 réponse
j'ai fais autre boucle qui parcours les lignes pour trouver jours fériées
mais beug si j'esaie mettre ça dans les autres boucles
la seulement derniere semaine se change de résultat . c'est a dire si j'ai 2 jours feriées
derniere ligne de 4 jours devienne 2
<?php
$host = 'localhost';
$user = 'root';
$bdd = 'cm';
mysql_connect($host, $user,'') or die("erreur de connexion au serveur");
mysql_select_db($bdd) or die("erreur de connexion a la base de donnees");
$annee = 2008;
// date (mysql type DATE) lundi de cette semaine --> $dateLundi
// date (mysql type DATE) vendredi de cette semaine --> $dateVendredi
// recherche en base des congés chevauchant cette semain
$query = "SELECT "
. "WEEK( Date_debut,2) AS wDebut,DAYOFWEEK( Date_debut ) AS wsDebut,"
. "TO_DAYS( Date_debut) AS dDebut,TO_DAYS( Date_fin ) AS dFin,date_debut, date_fin"
. " FROM tab_test"
. " WHERE YEAR(Date_debut) =" . $annee
. " OR YEAR(Date_fin) =" . $annee ;
//echo '<br>...' . $query;
$result = mysql_query( $query ) or die( mysql_error() );
// réservationtableau pour les nbre de jours par semaine
for( $i=0; $i<53; $i++ )
$nbrJours[ ] = 0;
// boucle sur les enregistrements de la table
while( $line = mysql_fetch_array( $result ) )
{
$semaine = $line['wDebut'];
$jourSemaine = $line['wsDebut']; // dimanche = 1
$jourDebut = $line['dDebut'];
$jourFin = $line['dFin'];
$jour1 = $line['date_debut'];
$jour2 = $line['date_fin'];
for( $jour = $jourDebut; $jour <= $jourFin; $jour++ )
{
if( $jourSemaine > 1 AND $jourSemaine <= 7 )
$nbrJours[ $semaine+1 ]++;
$jourSemaine++;
if( $jourSemaine > 7 ) {$semaine++; $jourSemaine = 1;}
}
for ($i=$jour1;$i<$jour2;$i++)
{
$individu = array("$i");
foreach($individu as $cle=>$valeur)
{
if ($valeur!='2008-08-01' and $valeur!='2008-08-08' and $valeur!='2008-05-01' and $valeur!='2008-05-08' )
{
echo $valeur;
}
else
{
$nbrJours[ $semaine+1 ]--;
}
}
}
}
// affichage résultat
echo '<pre>'; print_r( $nbrJours ); echo '</pre>';
?>
mais beug si j'esaie mettre ça dans les autres boucles
la seulement derniere semaine se change de résultat . c'est a dire si j'ai 2 jours feriées
derniere ligne de 4 jours devienne 2
<?php
$host = 'localhost';
$user = 'root';
$bdd = 'cm';
mysql_connect($host, $user,'') or die("erreur de connexion au serveur");
mysql_select_db($bdd) or die("erreur de connexion a la base de donnees");
$annee = 2008;
// date (mysql type DATE) lundi de cette semaine --> $dateLundi
// date (mysql type DATE) vendredi de cette semaine --> $dateVendredi
// recherche en base des congés chevauchant cette semain
$query = "SELECT "
. "WEEK( Date_debut,2) AS wDebut,DAYOFWEEK( Date_debut ) AS wsDebut,"
. "TO_DAYS( Date_debut) AS dDebut,TO_DAYS( Date_fin ) AS dFin,date_debut, date_fin"
. " FROM tab_test"
. " WHERE YEAR(Date_debut) =" . $annee
. " OR YEAR(Date_fin) =" . $annee ;
//echo '<br>...' . $query;
$result = mysql_query( $query ) or die( mysql_error() );
// réservationtableau pour les nbre de jours par semaine
for( $i=0; $i<53; $i++ )
$nbrJours[ ] = 0;
// boucle sur les enregistrements de la table
while( $line = mysql_fetch_array( $result ) )
{
$semaine = $line['wDebut'];
$jourSemaine = $line['wsDebut']; // dimanche = 1
$jourDebut = $line['dDebut'];
$jourFin = $line['dFin'];
$jour1 = $line['date_debut'];
$jour2 = $line['date_fin'];
for( $jour = $jourDebut; $jour <= $jourFin; $jour++ )
{
if( $jourSemaine > 1 AND $jourSemaine <= 7 )
$nbrJours[ $semaine+1 ]++;
$jourSemaine++;
if( $jourSemaine > 7 ) {$semaine++; $jourSemaine = 1;}
}
for ($i=$jour1;$i<$jour2;$i++)
{
$individu = array("$i");
foreach($individu as $cle=>$valeur)
{
if ($valeur!='2008-08-01' and $valeur!='2008-08-08' and $valeur!='2008-05-01' and $valeur!='2008-05-08' )
{
echo $valeur;
}
else
{
$nbrJours[ $semaine+1 ]--;
}
}
}
}
// affichage résultat
echo '<pre>'; print_r( $nbrJours ); echo '</pre>';
?>