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

Langage PHP Discussion :

Calculer les heures de nuit


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Femme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2021
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2021
    Messages : 13
    Points : 11
    Points
    11
    Par défaut Calculer les heures de nuit
    Bonjour,
    J'ai un petit souci pour calculer mes heures de nuit c'est à dire que de 22h à 7h cela me compte -22 alors que je devrai trouver 9
    Si quelqu'un pourrait m'aider cela serait sympa, je galère , merci
    voici un bout de mon code:


    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    $monthName = ucfirst(strftime('%c', mktime(0,0, 0, $mois, 10)));
     
    if(empty($arrayDates) && !$estSR){
    	$num = cal_days_in_month(CAL_GREGORIAN, date("m"), date("Y"));
     
    	$typeSaisie = "insert";
    	for ($i = 1; $i <= $num; $i++) {
            $mktime = mktime(date("H"),date("i"),0, date("m"), $i, date("Y"));
     
     
     
            $date = array( "id_contrat" => "$contrat->id",
    	        		"date_saisie" => strftime("%Y-%m-%d", $mktime),
    	        		"h_matin" => null,
    	        		"h_am" => null,
    					"h_nu" => null,
    	        		"h_arrive_m" =>  null,
    	        		"h_depart_m" =>  null,
    	        		"h_arrive_am" =>  null,
    	        		"h_depart_am" =>  null,
    				"h_arrive_nu" =>  null,
    	        		"h_depart_nu" =>  null ,
    	        		"validation_salarie" => 0,
    	        		"date_validation_salarie" => null,
    	        		"validation_employeur" => 0,
    	        		"date_validation_employeur" => null,
    	        		"commentaire_salarie" => null,
    	        		"observation_employeur" => null,
    	   			);
            array_push($arrayDates, $date);

  2. #2
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 848
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 848
    Points : 6 535
    Points
    6 535
    Par défaut
    Le code que tu as posté n'est pas en rapport avec la question posée.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

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

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

    Informations forums :
    Inscription : Août 2003
    Messages : 6 690
    Points : 20 211
    Points
    20 211
    Par défaut
    Comme tu es a cheval sur 2 jours tu as forcément une date de début et une date de fin différente.

    LA différence entre ces deux valeurs temporelle via DateTime (par exemple) devrait te donner la bonne valeur.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre à l'essai
    Femme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2021
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2021
    Messages : 13
    Points : 11
    Points
    11
    Par défaut voici un bout de class
    Citation Envoyé par CosmoKnacki Voir le message
    Le code que tu as posté n'est pas en rapport avec la question posée.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
      //variable mission
    	  $startDate = $csvData[10];
    	  $arrayS = explode(' ', $startDate);
    	  $tempDate = explode('/', $arrayS[0]);
    	  $strDate = $tempDate[2]."-".$tempDate[1]."-".$tempDate[0]." ".$arrayS[1];
    	  $dateDebut = strtotime($strDate);
    	  $start = date('Y-m-d', $dateDebut);
    	  //echo date('d/M/Y H:i:', $date);
    	  $endDate = $csvData[11];
    	  $arrayS1 = explode(' ', $endDate);
    	  $tempDate1 = explode('/', $arrayS1[0]);
    	  $strDate1 = $tempDate1[2]."-".$tempDate1[1]."-".$tempDate1[0]." ".$arrayS1[1];
    	  $dateFin = strtotime($strDate1);
    	  $end = date('Y-m-d', $dateFin);
    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
    	if(h_arrive_m < 7 && h_arrive_m != 0 ){
                    h_nuit += (7 - h_arrive_m);
                }
    			if(h_depart_am > 22){
    				h_nuit += ( h_depart_am - 22);
    			}
    			if(h_arrive_am > 22){
    				h_nuit += (h_depart_am - h_arrive_am);
    			}
    			/*
    			if(dateNum === 6){
    	            if(h_departAM > 16 && h_departAM != 0 && h_arriveAM < 16){
    	                h_samedi += (h_depart_am - 16);
    	            }
    	            if(h_departAM > 16 && h_departAM != 0 && h_arriveAM > 16){
    	                h_samedi += (h_depart_am - h_arrive_am);
    	            }
    	        }*/
    *

    En fait je dois modifier le code avec colonnes nuit , il y déjà des colonnes matin et après-midi avec des horaires de début et fin et donc le résultat est négatif.
    Je précise que ce n'est pas mon code et je galère un peu 😅 merci

  5. #5
    Membre à l'essai
    Femme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2021
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2021
    Messages : 13
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par grunk Voir le message
    Comme tu es a cheval sur 2 jours tu as forcément une date de début et une date de fin différente.

    LA différence entre ces deux valeurs temporelle via DateTime (par exemple) devrait te donner la bonne valeur.
    Bonjour,
    Au lieu de mktime?🤔

    #ce n'est pas mon code et je galère un petit peu, merci de ton retour

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

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

    Informations forums :
    Inscription : Août 2003
    Messages : 6 690
    Points : 20 211
    Points
    20 211
    Par défaut
    De quelles données dispose tu concrètement au moment ou tu veux calculer tes heures de nuit ?
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre à l'essai
    Femme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2021
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2021
    Messages : 13
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par grunk Voir le message
    De quelles données dispose tu concrètement au moment ou tu veux calculer tes heures de nuit ?
    J'ai un tableau avec les jour de la semaine et année calendaire ou on peut entrer heures arrivée et départ pour le matin et l'après-midi, il faudrait juste de j'ajoute les heures de nuit au pire même si je n'ajoute pas de colonnes sur le front mais au moins que je puisse le voir le tableau de bord, je ne sais pas si tu vois ce que je veux dire...

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

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

    Informations forums :
    Inscription : Août 2003
    Messages : 6 690
    Points : 20 211
    Points
    20 211
    Par défaut
    Ce que tu as sur ton front n'a pas d'importance.
    Ce que je veux savoir c'est de quelle données dispose tu actuellement et sous quel format pour calculer tes heures de nuit.

    Mais globalement ca revient à faire des différence de temps entre tes valeurs et les limites définies et ce en fonction de là ou la valeur se trouve dans le temps
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 848
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 848
    Points : 6 535
    Points
    6 535
    Par défaut
    Citation Envoyé par grunk Voir le message
    Ce que je veux savoir c'est de quelle données dispose tu actuellement et sous quel format pour calculer tes heures de nuit.
    À vue de code (peut-être je m'avance un peu trop), je dirais que chaque mission tient dans une ligne de CSV dont les colonnes 10 et 11 sont respectivement la date d'arrivée et la date de départ, toutes deux au format: d/m/Y H:i
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  10. #10
    Membre à l'essai
    Femme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2021
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2021
    Messages : 13
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par CosmoKnacki Voir le message
    À vue de code (peut-être je m'avance un peu trop), je dirais que chaque mission tient dans une ligne de CSV dont les colonnes 10 et 11 sont respectivement la date d'arrivé et la date de départ, toutes deux au format: d/m/Y H:i

    Bien vu, effectivement l'administrateur peut extraire un fichier csv

  11. #11
    Membre à l'essai
    Femme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2021
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2021
    Messages : 13
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par grunk Voir le message
    Ce que tu as sur ton front n'a pas d'importance.
    Ce que je veux savoir c'est de quelle données dispose tu actuellement et sous quel format pour calculer tes heures de nuit.

    Mais globalement ca revient à faire des différences de temps entre tes valeurs et les limites définies et ce en fonction de là ou la valeur se trouve dans le temps
    donc ma table contient h.matin, h.am, h.nuit, h.arrivee_matin, h.depart_matin, h.arrivee_am, h.depart_am (qui ont été mise en varchar) définit dans les classes aussi php avec wp .
    une date de saisie (date) est au préalablement inscrit pour chaque mois.

    J'ai testé des colonnes en plus mais toujours ce résultat négatif, je pense que je dois définir les dates sur 24h mais je ne sais pas trop
    Je peux sortir un fichier csv pour voir les heures d'une personne.

    #désolé j'ai l'impression de pataugé

  12. #12
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 848
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 848
    Points : 6 535
    Points
    6 535
    Par défaut
    Ça serait utile de nous en montrer quelques lignes significatives pour confirmation (au besoin change les données compromettantes). Autre chose: est-ce que les missions peuvent s'étendre sur plus de 48h? Et comment est découpée un jour complet (quelles sont les plages?): on sait déjà que de 0h à 7h et de 22h à 7h c'est la nuit, qu'en est-il de 7h à 22h?
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

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

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

    Informations forums :
    Inscription : Août 2003
    Messages : 6 690
    Points : 20 211
    Points
    20 211
    Par défaut
    J'ai du mal à comprendre ta problématique.

    De ce que tu expliques tu as déjà des champs heure d'arrivé/départ matin et après midi , ce qui veux dire que ton utilisateur rempli lui même ces valeurs et qu'il n'ya donc pas d'algorithmie particulière
    Ca voudrais donc dire que pour rester dans la même logique ton utilisateur devrais saisir son heure d'arriver/départ nuit auquel cas il n'y'a qu'une soustraction à faire.

    Là où ca serait plus "compliqué" c'est si tu as simplement une date/heure de début et de fin et qu'il faut en extraire tous les temps de travail.
    Ca implique en gros de découper l'intervalle de temps en plusieurs partie pour calculer les valeurs nécessaires.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  14. #14
    Membre à l'essai
    Femme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2021
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2021
    Messages : 13
    Points : 11
    Points
    11
    Par défaut
    Bonjour,
    oui c'est ça, le code fait déjà les calculs de soustraction mais il faut juste que je précise les heures de calcul sur 24h, il y a que ça qu'il pourrait manquer...car de 22h à 7h, mon code me donne -15 au lieu de 9
    désolé d'être implicite

  15. #15
    Modérateur
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 067
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 067
    Points : 17 155
    Points
    17 155
    Par défaut
    Salut
    Citation Envoyé par missgamer Voir le message
    ...car de 22h à 7h, mon code me donne -15 au lieu de 9
    Un peu bourrin, mais juste avant utilisation, en fin d'analyse, ajouter une dernière condition
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (h_nuit < 1){h_nuit = h_nuit+24};
    Soyez sympa, pensez -y
    Balises[CODE]...[/CODE]
    Balises[CODE=NomDuLangage]...[/CODE] quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Balises[C]...[/C] code intégré dans une phrase.
    Balises[C=NomDuLangage]...[/C] code intégré dans une phrase quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Le bouton en fin de discussion, quand vous avez obtenu l'aide attendue.
    ......... et pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.
    👉 → → Ma page perso sur DVP ← ← 👈

  16. #16
    Membre à l'essai
    Femme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2021
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2021
    Messages : 13
    Points : 11
    Points
    11
    Par défaut
    ouais tout bête, merci je vais tester ça

Discussions similaires

  1. [XL-2016] Excel : Formule pour calculer les heures de nuit ?
    Par DKPr0ject dans le forum Excel
    Réponses: 5
    Dernier message: 07/07/2018, 20h05
  2. calcul d'heures de nuit après 00:00
    Par chamalac dans le forum Excel
    Réponses: 7
    Dernier message: 11/06/2009, 19h31
  3. Calculer les heures en jours et les jours en heures dans 2 combobox
    Par philoflore dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 18/07/2008, 20h09
  4. Calcul sur les heures jour/nuit
    Par scrat57000 dans le forum VBA Access
    Réponses: 7
    Dernier message: 06/05/2007, 15h53

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