Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2022
    Messaggi
    84

    Fissare appuntamenti e recuperare orari disponibili in una giornata

    Buon pomeriggio,

    dovrei fare questa cosa con php, ma non so da dove iniziare. Più che altro vorrei capire come strutturare il tutto.

    In pratica ho giornata intera (una sola, quindi non parliamo di giorni della settimana o di calendario) che va dalle 00:00 alle 23:59. All'interno di questa giornata dovrei inserire degli appuntamenti (esempio dalle 13:23 alle 14:01), che non arriveranno ad un centinaio. Alla fine dell'inserimento dovrei recuperare gli orari ancora disponibili (che poi è la sola cosa che mi interessa). Per esempio, ipotizzando questi appuntamenti:

    03:10/03:25
    07:42/08:10
    13:23/14:01
    18:15/19:00
    23:02/23:09

    dovrei recuperare questi risultati, anche in formato testo:

    00:00/03:09
    03:26/07:41
    08:11/13:22
    14:02/18:14
    19:01/23:01
    23:10/23:59

    Purtroppo gli appuntamenti si possono anche sovrapporre (es: 19:01/19:20 e 19:10/19:30) e questo sicuramente rappresenta un problema, che mi ha fatto anche desistere.

    E' possibile farlo?
    Ultima modifica di jip77; 23-02-2023 a 16:06

  2. #2
    Il "giorno" inizia alle 00:00, e tu sai qual'è il primo appuntamento, quindi per trovare il primo "buco" parti dall'orario del primo appuntamento a ritroso, cioè dalle 0:00 al primo appuntamento.
    A quel punto sai la fine del primo appuntamento e l'inizio del secondo, quindi il "buco" è dalla fine del primo all'inizio del secondo, e via così.

    Per la "sovrapposizione" lavori con "fine corrente" e "inizio successivo": se si sovrappongono (inizio successivo < fine corrente) allora tieni "buono" la fine del successivo

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2022
    Messaggi
    84
    I concetti che hai espresso sono chiari, ma qui parliamo di minuti e districarsi non è facile. Per esempio dopo 01:59, c'è 02:00 e non 01:60. Per me non è semplice.

    Io avevo pensato di mettere gli appuntamenti in un array multidimensionale, anche perchè gli appuntamenti vengono inseriti in ordine casuale e così facendo avrei il modo di organizzarli in ordine crescente:
    codice:
    $agenda['03:10'] = array("inizio"=>"03:10", "fine"=>"03:25");     
    $agenda['07:42'] = array("inizio"=>"07:42", "fine"=>"08:10");
    
    $agenda['13:23'] = array("inizio"=>"13:23", "fine"=>"14:01");
    
    
    ksort($agenda);
    Poi, per esempio, tra il secondo ed il terzo appuntamento potrebbe non esserci spazio:

    18:02/18:50
    18:51/19:10

    Ecco perché volevo capire bene come strutturare il tutto
    Ultima modifica di jip77; 23-02-2023 a 16:53

  4. #4
    potresti appoggiarti a una tabella di db dove ci sono tutti i minuti della giornata (quindi parliamo di 1440 record, una sciocchezza) e andare a flaggare come occupati tutti i minuti tra il minito di inizio e quello di fine.

    metti i minuti come stringa, così sono perfettamente in ordine da "00.00" a "23.59"


  5. #5
    Beh ma il fatto che siano "minuti" e non "fragole" non cambia nulla....dovrai solo trattare il dato nel modo più appropriato.
    Per esempio, inizio e fine appuntamento anzichè salvarli come "hh:mm" te li salvi come "timestamp" (relativo o assoluto, dipende dal tuo progetto) e a quel punto è un attimo verificare se è prima, dopo, nel mezzo ecc ecc perchè lavori con interi!
    Quando poi devi "tirare fuori i buchi", riconverti da timestamp a "hh:mm" e hai fatto il tuo sporco lavoro, elegantemente e facilmente

  6. #6
    Utente di HTML.it
    Registrato dal
    Oct 2022
    Messaggi
    84
    Quote Originariamente inviata da optime Visualizza il messaggio
    potresti appoggiarti a una tabella di db dove ci sono tutti i minuti della giornata (quindi parliamo di 1440 record, una sciocchezza) e andare a flaggare come occupati tutti i minuti tra il minito di inizio e quello di fine.

    metti i minuti come stringa, così sono perfettamente in ordine da "00.00" a "23.59"

    Purtroppo non posso fare un database, però credo si possa fare la stessa cosa con un array dove ci sono tutti i minuti della giornata e dal quale andrò poi ad eliminare i minuti dei vari appuntamenti.

    Una cosa che non ho specificato è che devo fare questa cosa per ogni operatore, quindi ho la necessità di ricavare questi spazi liberi per ogni operatore, ecco perché sto cercando di complicarmi il meno possibile la vita.

  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2022
    Messaggi
    84
    Quote Originariamente inviata da Dascos Visualizza il messaggio
    Beh ma il fatto che siano "minuti" e non "fragole" non cambia nulla....dovrai solo trattare il dato nel modo più appropriato.
    Per esempio, inizio e fine appuntamento anzichè salvarli come "hh:mm" te li salvi come "timestamp" (relativo o assoluto, dipende dal tuo progetto) e a quel punto è un attimo verificare se è prima, dopo, nel mezzo ecc ecc perchè lavori con interi!
    Quando poi devi "tirare fuori i buchi", riconverti da timestamp a "hh:mm" e hai fatto il tuo sporco lavoro, elegantemente e facilmente
    Scusami ma timestamp non restituisce un numero in base ad una data? Oppure può funzionare anche solo con ore e minuti?

  8. #8
    Dipende!
    Nel senso, se a te serve sapere anche il giorno/mese/anno allora usi i valori reali e costruisci quello che ti serve con mktime e/o date.
    Se non ti serve giorno/mese/anno, usi un "falso" giorno su cui poi fai i calcoli di sommare, sottrarre, confrontare ecc ecc.
    In pratica, se non ti serve avere una data reale e completa, siccome unixtimestamp è una convenzione che conta i secondi a partire da un giorno preciso (01/01/1970), tu "fai finta" che ogni intervallo sia riferito a quel momento (dale 00:00:00 del 01/01/1970 fino alle 23:59:59 del 01/01/1970) e il calcolo ti viene facile usando solo ore:minuti:secondi (o ore:minuti)

    :-D

  9. #9
    Integro la risposta

    date_default_timezone_set('UTC');
    echo mktime(0, 0, 3, 1, 1, 1970);

    Ti restituirà "3", cioè 3 secondi a partire dalla mezzanotte del 1/1/1970...vedi da te che fare i conteggi prendendo un orario relativo al 1/1/70 viene facile....

    inizio appuntamento 09:31. Noi facciamo finta che sia 09:31 del 1/1/1970, quindi lo unixtimestamp sarà

    echo mktime(9, 31, 0, 1, 1, 1970);

    cioè 34260 secondi. Se finisse alle 11:12 allora avremmo

    echo mktime(11, 12, 0, 1, 1, 1970);

    cioè 40320 secondi.

    A quel punto i calcoli vengono da soli

  10. #10
    Utente di HTML.it
    Registrato dal
    Oct 2022
    Messaggi
    84
    Quote Originariamente inviata da Dascos Visualizza il messaggio
    Dipende!
    Nel senso, se a te serve sapere anche il giorno/mese/anno allora usi i valori reali e costruisci quello che ti serve con mktime e/o date.
    Se non ti serve giorno/mese/anno, usi un "falso" giorno su cui poi fai i calcoli di sommare, sottrarre, confrontare ecc ecc.
    In pratica, se non ti serve avere una data reale e completa, siccome unixtimestamp è una convenzione che conta i secondi a partire da un giorno preciso (01/01/1970), tu "fai finta" che ogni intervallo sia riferito a quel momento (dale 00:00:00 del 01/01/1970 fino alle 23:59:59 del 01/01/1970) e il calcolo ti viene facile usando solo ore:minuti:secondi (o ore:minuti)

    :-D
    In realtà questi appuntamenti vengono fissati durante i vari giorni della settimana o del mese, ma per me non fa differenza. A me interessa solo sapere che, dopo aver inserito tutti gli appuntamenti, mi rimangono degli orari nei quali sicuramente l'operatore sarà libero indipendentemente dal giorno che scelgo.

    Mettiamo per assurdo che un operatore abbia in totale un solo appuntamento, sempre di lunedì e sempre dalle 12:00 alle 13:00. Gli altri giorni della settimana l'operatore sarà disponibile dalle 12:00 alle 13:00, ma non è un dato che mi interessa. Mi serve solo sapere che qualunque giorno io scelga, dalle 00:00 alle 11:59 e poi dalle 13:01 alle 23:59 sia sempre disponibile

    Ecco perché voglio lavorare su un giorno ipotetico (purtroppo con il problema che un appuntamento possa accavallarsi come orario).
    Ultima modifica di jip77; 23-02-2023 a 19:12

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.