IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

ecart entre 2 dates


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2019
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2019
    Messages : 20
    Par défaut ecart entre 2 dates
    Bonjour
    Je demande votre aide pour debloquer une situation.
    J'essai de calculer l'ecart en heures entre deux dates.


    J'arrive à sélectionner les données depuis la bdd et les afficher en array.
    Ce que je souhaiterais c'est sortir le tableau avec nom - prenom - ecart.


    Pour le calcul j'utilise une fonction qui le fait bien, cependant je ne sais pas comment associer ceci à ma requête pour sortir le tableau comme je souhaite.

    Je demande votre aide


    Ma requête

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    include('db.php');
     
    	$statement = $connection->prepare("SELECT nom, prenom, datedebut, datefin FROM tbl_test");
    	$statement->execute();
    	$result = $statement->fetchAll();
    	$data = array();
    	foreach ($result as $row) {
    		$data[] = $row;	
    	}
     
    	echo json_encode($data);

    La fonction qui calcul l'écart
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    function biss_hours($start, $end){
     
        $startDate = new DateTime($start);
        $endDate = new DateTime($end);
        $periodInterval = new DateInterval( "PT1H" );
     
        $period = new DatePeriod( $startDate, $periodInterval, $endDate );
        $count = 0;
     
        foreach($period as $date){
     
        $startofday = clone $date;
        $startofday->setTime(8,30);
     
        $endofday = clone $date;
        $endofday->setTime(17,30);
     
            if($date > $startofday && $date <= $endofday && !in_array($date->format('l'), array('Sunday','Saturday'))){
     
                $count++;
            }
     
        }
     
    	//Get seconds of Start time
    	$start_d = date("Y-m-d H:00:00", strtotime($start));
    	$start_d_seconds = strtotime($start_d);
    	$start_t_seconds = strtotime($start);
    	$start_seconds = $start_t_seconds - $start_d_seconds;
     
    	//Get seconds of End time
    	$end_d = date("Y-m-d H:00:00", strtotime($end));
    	$end_d_seconds = strtotime($end_d);
    	$end_t_seconds = strtotime($end);
    	$end_seconds = $end_t_seconds - $end_d_seconds;
     
    	$diff = $end_seconds-$start_seconds;
     
    	if($diff!=0):
    		$count--;
    	endif;
     
    	$total_min_sec = date('i:s',$diff);
     
    	return $count .":".$total_min_sec;
    }


    La je fais le calcul avec ca

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $start = $row["datedebut"];
    $end = $row["datefin"];
     
    $ecart = biss_hours($start,$end);


    Merci d'avance pour votre aide

  2. #2
    Membre chevronné Avatar de ma5t3r
    Homme Profil pro
    Développeur freelance
    Inscrit en
    Mai 2015
    Messages
    320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2015
    Messages : 320
    Par défaut
    Le mieux est d'utiliser la POO mais ça marche aussi comme ça.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
            $statement = $connection->prepare("SELECT nom, prenom, datedebut, datefin FROM tbl_test");
            $statement->execute();
            $result = $statement->fetchAll();
            $data = array();
     
            foreach ($result as $row) {
                $t = array(
                    'nom' => $row['nom'],
                    'prenom' => $row['prenom'],
                    'datedebut' => $row['datedebut'],
                    'datefin' => $row['datefin'],
                    'ecart' => biss_hours($row['datedebut'],$row['datefin']),
                );
                $data[] = $t;
            }
            var_dump($data);

  3. #3
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Ou alors directement en SQL via TIMESTAMPDIFF
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2019
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2019
    Messages : 20
    Par défaut
    Bonjour à tous

    @ma5t3r ta proposition me conviens parfaitement et ça marche comme je veux.


    Pour finir, peux tu s'il te plais m'aider à avoir la moyenne des écarts pour le tableau $data?


    Merci d'avance pour ton aide


    Salutations

  5. #5
    Membre chevronné Avatar de ma5t3r
    Homme Profil pro
    Développeur freelance
    Inscrit en
    Mai 2015
    Messages
    320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2015
    Messages : 320
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    //total
    $total = 0;
    $tab = array();
    foreach($data as $d):
        $total+= $d['ecart'];
    endforeach;
     
    //moyenne
    $moyenne = $total / count($data);
     
    //valeurs absolues des écarts
    $vae = 0;
    foreach($data as $d):
       $vae+=  abs($d['ecart'] - $moyenne);
    endforeach;
     
     
    //écart moyen
     
    $ecart = $vae / count($data);
    Tester les éventuelles erreurs : tableau vide, ...
    Ca devrait être bon.

  6. #6
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2019
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2019
    Messages : 20
    Par défaut
    Bonjour
    Merci ca marche.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Calcul ecart entre 2 dates
    Par Pachina75 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 16/06/2014, 18h39
  2. [AC-2007] calcul ecart entre date jour ouvrable
    Par popofpopof dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 04/12/2012, 13h51
  3. Ecart entre 2 date
    Par toss.net dans le forum Requêtes
    Réponses: 1
    Dernier message: 20/04/2010, 10h05
  4. Ecart entre 2 dates (en mois)
    Par Ggamer dans le forum Général Python
    Réponses: 3
    Dernier message: 04/05/2008, 12h16
  5. Ecart entre 2 dates
    Par Wells dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 25/10/2007, 16h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo