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

EDI, CMS, Outils, Scripts et API PHP Discussion :

[Calendrier] Algorithme : Verification de Plages de Réservations


Sujet :

EDI, CMS, Outils, Scripts et API PHP

  1. #1
    Membre à l'essai Avatar de Mak-chan
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2017
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Jura (Franche Comté)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Août 2017
    Messages : 11
    Points : 12
    Points
    12
    Par défaut [Calendrier] Algorithme : Verification de Plages de Réservations
    Bonjour à tous !
    J'ai un projet de développement contenant un calendrier de réservations de véhicules, jusque là, pas de problème !
    Enfin rien que je n'ai su surmonter seul et/ou avec x milles heures de recherches @^@/ ...

    Seulement voilà :
    J'commence à être un p'ti peu las de chercher en vain surtout que ce que j'essaie là relève presque d'avantage de la fonction mathématique que d'une recherche de programmation,
    Et je suis très mauvais "mathématicien", mais encore PIRE sur c'qui est des manipulations de dates !
    J'vous préviens d'avance : je suis vraiment en mal sur mon algorithme ... Sinon je n'serais pas là j'imagine

    Alors je viens quémander un coups de main ^^ !
    Et si quelqu'un se sent d'm'aider j'lui en serait vraiment reconnaissant ;-;'

    Je vais m'expliquer en fonctionnalités pures plutôt qu'en code, cela m'aide à y voir plus clair, et mon code final diffère vachement d'un truc basique avec tous ce que je passe dedans mais je devrais pouvoir convertir ^^' !
    Enfin c'est surtout que j'ai pas VRAIMENT de code fait au final, pas là dessus, car je n'arrive pas à définir ce fichu algorithme >_> !
    Je peux joindre mon code et/ou mes essais de logique algorithmique si besoin...

    Bref :

    On souhaite affecter un véhicule à une réservation pour la valider.
    La réservation se fera sur une plage définie par une date/heure de départ, et une autre de retour.
    Mon calendrier affiche les véhicules déjà réservés.
    J'ai à côté tout une liste de véhicules, ceux qui existent dans ma BD, pour les affecter à la réservation à valider...
    Ce que j'veux faire : C'est rayer dans la liste : les véhicules déjà réservés sur la plage horaire de la réservation à faire, pour empêcher d'les allouer 2 fois...

    Seulement là, j'me r'tourne le crâne .... Pas sur comment rayer où afficher les véhicules, mais sur comment vérifier qu'ils sont prit sur une plage qui occupe tout ou partie de la plage voulue.

    Je ne sais pas comment tourner mes conditionnels pour vérifier ça d'mannière efficace, surtout qu'un véhicule peut-être prît sur plusieurs jours et c'est même là l'gros d'mon problème x_x ..
    Je n'arrive résolument pas à trouver comment faire tous les cas ... Et pourtant j'essaie vraiment >w<
    J'ai des dates de départ et de retour, pour les réservations créées || Et pour celle que l'on veut faire.
    J'ai aussi des heures départ & retour pour les 2 types de réservations.
    Je peux éventuellement tout rassembler pour une comparaison ... type "2018-04-19 11:20" Si c'est utile ..
    PHP à pleins de fonctions dateTime du genre, don une de "diff" qui calcul le temps entre 2 dates ...
    Mais je n'y comprends pas grand chose, et surtout je n'arrive pas à en extraire LA fonction utile puisque je ne sais pas vraiment comment m'y prendre ...
    J'ai vite, trèèès vite, tendance à me perdre quand il s'agît de temporalité..

    Idéalement :
    J'aimerais pouvoir définir des PLAGES INDISPONIBLES posées sur les Réservations en Cours.
    Et comparer la plage de la Réservation à Créer avec celles-là, pour afficher les véhicules indisponibles de toutes les réservations don la plage empiète sur celle désirée...

    Logique, non ?!

    Mais je n'arrive pas à imbriquer des conditionnels de sorte à couvrir tous les cas, où bien à faire des vérifications "simples" que si la plage voulue se trouve dans une plage prise, on indique que c'est mort !
    Pourtant c'est envisageable non ? Où bien alors y à une façon plus méthodique d'aborder tous les cas de réservations possibles les uns après les autres ?! Non ?
    Actuellement je m'noie dans des horreurs de type :
    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
     
    Si(le trajet est sur une journée)
    {
        ->Comparer les heures :
          //Là je m'embrouille à mort, avec des tests genre : si départ_voulu > départ_prit, alors on vérifie retour_voulu < retour_prit etc ... Mais ça ne va pas.
          //Pour essayer de trouver quand une plage prise empiète sur la plage voulue, sur une journée
    }
    SINON
    {
       ->Comparer les heures :
         //Encore + bordélique, car il faut prendre en compte qu'une réservation du 15/05/2018 16H30, au 16/05/2018 09H20 va bloquer le véhicule sur ce laps de temps,
         //Et donc empêcher une réservation sur le 15/05/18, de 17H à 22H, par exemple, puisque le véhicule reste indisponible jusqu'au lendemain @-@ 
    }
     
    //J'ai séparé la comparaison sur un même jour à celle sur plusieurs jours, car j'estimais la verif' des heures différente de l'un à l'autre mais je m'y perds, complétement.
    Enfin voilà, j'me noie complet et si une bonne âme passe dans l'coin avec une p'tite bouée j'veux bien la prendre 8)

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    au lieu de faire semblant de parler d'jeun's , montres-nous la structure de la table des réservations.

    (date + heure) de début/fin peuvent être convertis en timestamp, qu'il est alors plus facile à comparer (que ce soit en SQL ou en PHP).

    Voyons les cas qui ne conviennent pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
              |----- période demandée -----|
    |----- résa KO -----|
    |------------------ résa KO ------------------|
                                        |----- résa KO -----|
                 |----- résa KO -----|
    Et donc, les cas qui conviennent :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
                                  |----- période demandée -----|
    |----- résa OK -----|
                                                                                |----- résa OK -----|
    A partir de là, ça devient plus facile à appréhender, non ?

  3. #3
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 628
    Points
    3 628
    Billets dans le blog
    8
    Par défaut
    Si ça peut servir, j'ai très régulièrement des requêtes à faire du genre
    telle période doit croiser au moins un jour telle autre période...
    Disons : la période d'ouverture de la foire du trône qui tombe pendant les vacances scolaires, pour qu'on comprenne
    J'ai maintenant le bon réflexe, qui consiste à faire ça :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    where fdt.debut <= vac.fin and fdt.fin >= vac.debut

    edit : les explications détaillées ici

    https://blog.developpez.com/philben/...nt_de_periodes

  4. #4
    Membre à l'essai Avatar de Mak-chan
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2017
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Jura (Franche Comté)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Août 2017
    Messages : 11
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par jreaux62 Voir le message

    [...]
    (date + heure) de début/fin peuvent être convertis en timestamp, qu'il est alors plus facile à comparer (que ce soit en SQL ou en PHP).
    [...]
    Mon dieu, que je suis bête ...
    Je savais que je passais à côté d'une solution "simple", mais là j'ai un peu honte quand même
    MERCI.
    Timestamp était le mot magique.
    Je n'arrivais pas à comprendre les comparaisons entre deux dates, puis je suis tombé sur un vulgaire "SI (dateDepart > dateRetour)" avec les dates en timestamps de type "2018-04-19 17:01".
    J'ai fait mes petits tests locaux bien sales, et c'est efficace ! Une date antérieure est bien inférieure à l'autre, et si c'est la même on se base sur les heures, ca fait tout tout seul ,c'est merveilleux

    Citation Envoyé par Dendrite Voir le message

    [...]
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    where fdt.debut <= vac.fin and fdt.fin >= vac.debut
    [...]
    Merci à toi aussi, ça me conforte dans mes idées de comparaison de comment placer mon "cadre" de plages horaires :')
    J'me suis prît la tête 2 jours pour rien, j'aurais vraiment du poster plus tôt !

    Vraiment, merci de l'aide, je suis m'en vais renouer avec mon calendrier et essayer de mettre tout cela proprement en pratique !

    Très bonne journée à tous ! *Kheur*

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

Discussions similaires

  1. Comment créer un calendrier dynamique pour un site de réservation
    Par kcirtap.tim dans le forum Développement Web en Java
    Réponses: 3
    Dernier message: 12/07/2015, 21h31
  2. Sélectionner une plage de réservation horaire
    Par userparis dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 15/11/2014, 12h27
  3. [MySQL] plage de réservation)
    Par helene38250 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 07/06/2007, 13h57
  4. Calendrier (plage de réservation)
    Par helene38250 dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 1
    Dernier message: 31/05/2007, 14h37
  5. [MySQL] Calendrier en PHP avec fonction de réservation
    Par Louison dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 18/05/2007, 12h54

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