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 :

Calcul de date avec horaire d'ouverture [PHP 5.6]


Sujet :

Langage PHP

  1. #1
    Membre averti Avatar de cyreel
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2004
    Messages
    388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2004
    Messages : 388
    Points : 324
    Points
    324
    Par défaut Calcul de date avec horaire d'ouverture
    Bonjour,

    Voila je rencontre un petit problème dans mon application.
    Je dois calculer la différence entre 2 dates saisie dans un formulaire tout en tenant compte des heures d'ouvertures de l'établissement.
    Exemple:
    Début: 22-01-2018 10:30:00
    Fin: 25-01-2018 14:00:00
    Opening time: 08:00:00 - 12:00:00 et 14:00:00 - 18:00:00
    J'ai essayé plusieur fois mais j'obtiens toujours des chiffres qui correspondent pas au calcul manuel.
    Je recherche une librairie ou tout autre pouvant m'aider.
    Je ne suis pas très à l'aise avec les dates.

    Merci.

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    Citation Envoyé par cyreel Voir le message
    Exemple:
    Début: 22-01-2018 10:30:00
    Fin: 25-01-2018 14:00:00
    Opening time: 08:00:00 - 12:00:00 et 14:00:00 - 18:00:00
    et vous souhaitez obtenir quel résultat avec cet exemple ?

  3. #3
    Membre averti Avatar de cyreel
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2004
    Messages
    388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2004
    Messages : 388
    Points : 324
    Points
    324
    Par défaut
    Désolé,
    j'ai oublié d'ajouter ça:

    Jour 1: 22-01-2018 10:30:00 - 22-01-2018 18:00:00 => 5h30
    jour 2: 23-01-2018 08:00:00 - 23-01-2018 18:00:00 => 8h
    jour 3: 24-01-2018 08:00:00 - 24-01-2018 18:00:00 => 8h
    jour 4: 25-01-2018 08:00:00 - 25-01-2018 14:00:00 => 4h
    Total absence: 25:30:00

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Et je suppose qu'il y a au moins un jour de fermeture donc si la période contient un jour de fermeture il faut aussi en tenir compte ?

    Les données servant au calcul proviennent d'une base de données SQL ou directement d'une saisie dans un formulaire ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Membre averti Avatar de cyreel
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2004
    Messages
    388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2004
    Messages : 388
    Points : 324
    Points
    324
    Par défaut
    Oui je jour de fermeture est dimanche.
    J'enregistre certes les dates dans une base de données mais je dois afficher la durée à l'utilisateur quand il choisi les dates.

  6. #6
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    Citation Envoyé par cyreel Voir le message
    Désolé,
    j'ai oublié d'ajouter ça:

    Jour 1: 22-01-2018 10:30:00 - 22-01-2018 18:00:00 => 5h30
    jour 2: 23-01-2018 08:00:00 - 23-01-2018 18:00:00 => 8h
    jour 3: 24-01-2018 08:00:00 - 24-01-2018 18:00:00 => 8h
    jour 4: 25-01-2018 08:00:00 - 25-01-2018 14:00:00 => 4h
    Total absence: 25:30:00
    vous avez déjà réglé une partie du problème vous même.
    dans votre code vous allez faire la même chose que dans cet exemple, c'est à dire découper le calcul en 3 morceaux :
    1. calcul pour le 1er jour
    2. calcul du temps pour les jours entiers
    3. calcul pour le dernier jour


    pour les calculs en eux même, j'ai l'habitude d'utiliser les timestamp pour les heures.
    et pour commencer vous pouvez transformer une date en timestamp avec la fonction http://php.net/mktime

    il est peut-être aussi possible d'utiliser la classe DateTime mais j'ai moins l'habitude de cela donc j'en appelle aux lecteurs de cette discussion pour savoir quel méthode vous conseillez.
    http://php.net/manual/fr/datetime.diff.php

  7. #7
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    Une piste de réflexion :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $closed   = new DateInterval('PT2H');  // fermé 2 heures
    $worktime = (new DateTime('22-01-2018 18:00:00'))->sub($closed)->diff(new DateTime('22-01-2018 10:30:00'))->format('%H:%I');     // 05:30

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

Discussions similaires

  1. Voyageur de commerce avec horaires d'ouverture
    Par grint54 dans le forum Algorithmes et structures de données
    Réponses: 21
    Dernier message: 28/02/2016, 18h24
  2. Calculer des dates avec fonction Gel de temps
    Par maxdata dans le forum Langage
    Réponses: 4
    Dernier message: 06/12/2012, 13h01
  3. Calcul de dates avec Batch
    Par gwinyam dans le forum Scripts/Batch
    Réponses: 4
    Dernier message: 30/08/2008, 23h20
  4. calcul délais entre deux dates avec plages horaires
    Par leila eco dans le forum SAP Crystal Reports
    Réponses: 3
    Dernier message: 03/01/2007, 16h51
  5. composant de calcul [champ date] avec rave report
    Par segnac dans le forum Bases de données
    Réponses: 2
    Dernier message: 20/06/2005, 19h08

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