Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16

Hybrid View

  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2022
    Messaggi
    88

    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
    88
    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
    Utente di HTML.it
    Registrato dal
    Oct 2022
    Messaggi
    88
    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.

  6. #6
    Quote Originariamente inviata da jip77 Visualizza il messaggio
    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.
    Puoi sempre valutare un database NEL browser....
    Per la tua necessità potrebbe andare bene.
    Se e ripeto SE sono informazioni specifiche per l'utente e solo l'utente può accedervi, ovvero io, Mario, creo gli appuntamenti e Giuseppe non deve sapere quando Mario è libero, allora puoi usare un IndexDB: https://developer.mozilla.org/en-US/...sing_IndexedDB

    Se invece Giuseppe deve poter sapere quando Mario è libero, POTRESTI usare un IndexDB, mettendo un temporizzatore che ogni tot va a "ricostruire" il db locale prendendo i dati dal "db" del server oppure con una funzione di "check_consistency" che chiami ogni volta che ci si muove nell'applicazione (si invia un form, si clicca un pulsante, si cambia pagina ecc ecc): se il "check" dice "ho un aggiornamento", allora eseguirai una serie di update/delete/insert nel db locale in accordo con le nuove informazioni del db remoto.

    Il tuo db remoto può benissimo essere un file come dici tu, semplicemente avrai un ulteriore file di supporto dove memorizzi "c'è un cambiamento", "questo è il cambiamento" e "questi clienti devono ancora aggiornare il db locale". Qualcosa di questo tipo
    codice:
    db:appuntamenti, name:mario, age:42, update:{mario:luigi}
    dove db:appuntamenti indica qual'è il db locale da aggiornare, name:mario indica la chiave univoca del dato che andrà aggiornato, age:42 indica che va aggiornato il valore del campo "age" con il nuovo valore 42, update:{mario:luigi} indica che mario e luigi devono ancora aggiornare questo dato nel loro db locale.

    Sembra complesso ma se leggi un po' di documentazione e fai qualche esperimento semplice vedrai che forse può fare al caso tuo

  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2022
    Messaggi
    88
    Ho capito il tuo ragionamento, ma nel mio caso "il gioco non vale la candela". Mi spiego meglio... Scarico dal portale (con il quale lavoro, ma che non ho realizzato io) in formato excel tutta la lista degli appuntamenti futuri. Devo creare un nuovo appuntamento per un operatore, e se l'orario si accavalla con un altro appuntamento, sono almeno 5 minuti di tempo perso per rifare tutto da capo e non esagero (oltre al nervosismo accumulato), anche perché potrei inserire più volte un orario non valido . Quindi, con quello che sto cercando di fare, ho una lista di orari disponibili che sicuramente andranno a buon fine qualsiasi giorno io programmi l'appuntamento. Purtroppo, come ho già detto, mi baso su un file scaricato. Se ora utilizzo un orario libero per un appuntamento futuro, più tardi mi dovrò ricordare di non utilizzare lo stesso orario, altrimenti siamo punto e a capo. Scaricare il file excel mi porta via quasi una mezz'oretta. Diciamo che il programma che utilizzo per lavoro, oltre ad essere estremamente lento, fa un po' acqua da tutte le parti.

    Tutto sommato però sono soddisfatto anche con il risultato che ho raggiunto, cioè con gli orari NON disponibili e penso di fermarmi più.

  8. #8
    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

  9. #9
    Utente di HTML.it
    Registrato dal
    Oct 2022
    Messaggi
    88
    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?

  10. #10
    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

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.