Visualizzazione risultati 1 fino 7 di 7
Like Tree2Likes
  • 1 Post By mzanella
  • 1 Post By darbula

Discussione: Pagina dinamica in alcune finestre temporali

  1. #1
    tryhere non è connesso Altervistiano Junior
    Data registrazione
    19-09-2007
    Messaggi
    739

    Predefinito Pagina dinamica in alcune finestre temporali

    Vorrei creare una pagina che consente agli utenti registrati di scegliere la loro formazione del fantacalcio, in prossimità dell'inizio della giornata di campionato la pagina deve memorizzare le formazioni di tutti gli utenti in un database e impedire che vengano effettuati nuovi cambi, alla fine della giornata di campionato la pagina deve risbloccare la possibilità di cambiare la formazione e così via.
    Vorrei sapere come posso far si che la pagina consenta le sostituzioni solamente nelle finestre temporali che gli imposto io e dichiari invece che le sostituzioni sono sospese al di fuori di questi periodi.
    Grazie mille!

  2. #2
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,667

    Predefinito

    Verosimilmente starai utilizzando un form per gestire i cambiamenti nelle formazioni, e quest'ultimo invierà i dati a una pagina PHP che aggiorna il database.
    Puoi semplicemente inserire un controllo nella pagina PHP che proceda con l'aggiornamento solo in determinati periodi, restituendo invece un messaggio d'errore in tutti gli altri casi.
    Puoi anche applicare la stessa logica nella pagina che mostra il form, alternando la visualizzazione di quest'ultimo a quella di un messaggio informativo.

    Concretamente, stai cercando qualcosa del genere:
    Codice:
    if (criterio temporale) {
        codice per la modifica delle formazioni
    }
    else {
        messaggio informativo
    }

    I suggerimenti che do più spesso:


  3. #3
    tryhere non è connesso Altervistiano Junior
    Data registrazione
    19-09-2007
    Messaggi
    739

    Predefinito

    Ok, supponiamo che in una tabella di un database io inserisca tutti i periodi in cui le modifiche sono concesse (ad esempio: {Giornata 1, 15/08, 18/08},{Giornata 2, 21/08, 24/08},...).
    In che modo scrivo il criterio temporale nel codice che mi hai riportato tu?

  4. #4
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,667

    Predefinito

    Un modo semplice è leggere dalla tabella la giornata di riferimento, convertire le coppie giorno-mese di inizio e fine in timestamp e confrontarli con il timestamp attuale:
    Codice PHP:
    $from strtotime("2020-08-15 00:00:00");
    $to strtotime("2020-08-18 00:00:00");
    if (
    $from <= time() && time() <= $to) {
        
    // codice per la modifica
    }
    else {
        
    // messaggio informativo

    darbula likes this.

    I suggerimenti che do più spesso:


  5. #5
    darbula non è connesso AlterGuru
    Data registrazione
    24-04-2011
    Messaggi
    1,977

    Predefinito

    Io invece ti consiglio di usare UTC e la classe DATETIME e verosimilmente di mostrare come display la data nel timezone del tuo utente (come display il vero dato è la riconversione in UTC).
    EDIT strtotime se originario da date dipende dal date.timezone impostato nel php.ini che è Europe/Rome.
    Codice PHP:
    $date_local = new DateTime("now", new DateTimeZone("UTC")); //Creazione in UTC
    $utc_tms $date_local->getTimestamp();
    $date_rome = new DateTime("now"), new DateTimeZone("Europe/Rome")); //creo un secondo oggetto altrimenti dovrei aggiungere l'ipotetico periodo di transizione manualmente.
    echo $date_rome->format("Y-m-d H:m:s")."\n";
    echo 
    $date_local->format("Y-m-d H:m:s")."\n"
    Ultima modifica di darbula : 29-07-2020 alle ore 13.57.19

  6. #6
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,667

    Predefinito

    strtotime dipende dal date.timezone impostato nel php.ini che è Europe/Rome.
    Non secondo la documentazione di PHP:
    [...] parse that format into a Unix timestamp (the number of seconds since January 1 1970 00:00:00 UTC) [...] The Unix timestamp that this function returns does not contain information about time zones.
    Inoltre, anche se non fosse UTC, sulle sottrazioni vale sempre la proprietà invariantiva...

    Chiaramente le alternative ai timestamp non mancano, si può anche gestire unicamente tramite SQL volendo.

    I suggerimenti che do più spesso:


  7. #7
    darbula non è connesso AlterGuru
    Data registrazione
    24-04-2011
    Messaggi
    1,977

    Predefinito

    Teoricamente grazie per la segnalazione ho corretto il messaggio precedente.
    php non è mai riuscito a calcolare con esattezza l'intervallo di due date diverse da UTC. Certo usano semplicemente un unico DST ST per tutto l'intero intervallo e invece dovrebbe essere iterato a ogni periodo di transizione. Attualmente a questa funzione https://www.php.net/manual/en/datetime.diff.php si limitano alla conversione interna in UTC.
    Comunque preferisco UTC poiché è il padre di tutti i fusi orari e non ha problemi di sorta DST ST o dipendenza dal database IANA che nel server di produzione potrebbe anche non essere aggiornato... il timezone è sempre variabile se riferito avanti rispetto alla data corrente.. la Russia ha utilizzato diversi fusi orari nel corso degli anni, tokyo utilizza un offset non valido per database IANA il che giustamente inverte il segno dall'offset (ma in php non c'è alcuna garanzia che funzioni sempre). https://www.php.net/manual/en/timezones.others.php
    Ultima modifica di darbula : 29-07-2020 alle ore 12.58.11
    mzanella likes this.

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •