Determinazione data

di pierpippo il
60 risposte

60 Risposte - Pagina 3

  • 24/06/2026 - pierpippo ha scritto:

    Un bel casino insomma.

    Eh sì...

    Per i periodi perché usi l'id al posto della descrizione?

    Penso che scolastico sia più umano di un numero...

    Riflettendo su natale e pasqua penso siano periodi invernali al netto dei periodi scolastici.

    Suppongo che la differenza ricada nel numero corse (almeno 2 per le ore di ingresso e uscita scolastica o di un mezzo apposito tipo scuolabus).

    Questo dovresti inserirlo nella tabella configurazione corse e nella tabella automezzi.

    Il tempo di verificare e applico le modifiche.

  • 25/06/2026 - sihsandrea ha scritto:

    Per i periodi perché usi l'id al posto della descrizione?

    Nella tabella che mi hai suggerito ho sia gli I'd che la descrizione dei periodi. 

    25/06/2026 - sihsandrea ha scritto:

    Riflettendo su natale e pasqua penso siano periodi invernali al netto dei periodi scolastici.

    In effetti si ma se uso periodi_scolastici poi avrei tre periodi distinti uno da 15/9a 24/12 uno da 6/1a Pasqua e il terzo da Pasqua a fine invernale. 

    25/06/2026 - sihsandrea ha scritto:

    Suppongo che la differenza ricada nel numero corse (almeno 2 per le ore di ingresso e uscita scolastica o di un mezzo apposito tipo scuolabus).

    Infatti ho la colonna frequenza (scolastica, feriale, festivo, giornaliero). 

    Dovrebbe servire a selezionare le corse feriali e scolastiche, oppure solo le feriali, o solo le festive. 

    Il parametro giornaliero si usa poco  ma definisce una corsa che si fa a prescindere dal tipo di gg. 

    25/06/2026 - sihsandrea ha scritto:

    Questo dovresti inserirlo nella tabella configurazione corse e nella tabella automezzi

    La tabella automezzi ancora nn esiste e non so se la voglio coinvolgere che già di variabili In gioco ne ho tante. Vedrò insomma.  Ma assolutamente devo capire sta tabella configurazione che ruolo dovrebbe avere. Non riesco a capire questa dinamica. 

    Scusa ma credo che in tutto sto scambio di mail mi sia perso qualche concetto, oppure che tu lo dai per scontato ma che per me non lo è. 

    Buona giornata. 

    Filippo 

  • Prova questo

    <?php 
    ....
    
    
    // RACCOLTA DATI FORM
    $imposta_periodo = $_POST["imposta_periodo"] ?? null;
    $data = $_POST["data"] ?? null;
    
    
    // mappa per nome_periodo (NUOVA STRUTTURA)
    $periodi = [
        "inverno" => [
            "start" => $_POST["start_inv"] ?? null,
            "end"   => $_POST["end_inv"] ?? null
        ],
        "estate" => [
            "start" => $_POST["start_est"] ?? null,
            "end"   => $_POST["end_est"] ?? null
        ],
        "natale" => [
            "start" => $_POST["start_nat"] ?? null,
            "end"   => $_POST["end_nat"] ?? null
        ],
        "pasqua" => [
            "start" => $_POST["start_pasq"] ?? null,
            "end"   => $_POST["end_pasq"] ?? null
        ]
    ];
    
    
    
    // UPDATE PERIODI
    if (isset($imposta_periodo)) {
    
        $sql = "UPDATE gbgar_scad_periodo 
                SET start_date = ?, end_date = ? 
                WHERE nome_periodo = ?";
    
        $stmt = $Conn->prepare($sql);
    
        foreach ($periodi as $nome => $p) {
    
            if (!empty($p["start"]) || !empty($p["end"])) {
    
                $start = $p["start"];
                $end = $p["end"];
    
                $stmt->bind_param("sss", $start, $end, $nome);
                $stmt->execute();
            }
        }
    
        echo "<div class='risposta'> Periodi aggiornati correttamente!</div>";
    
    } else {
        echo "<div class='risposta'> Nessuna modifica ai periodi.</div>";
    }
    
    
    
    // LETTURA PERIODI DB
    $select_sql = "SELECT nome_periodo, start_date, end_date 
                   FROM gbgar_scad_periodo";
    
    $risultato_select = $Conn->query($select_sql);
    
    if ($risultato_select == FALSE) {
        die("Errore query: " . $Conn->error);
    }
    
    $periodi_db = [];
    
    while ($row = $risultato_select->fetch_assoc()) {
        $periodi_db[$row["nome_periodo"]] = $row;
    }
    
    
    // SESSIONE
    $_SESSION['data'] = $data;
    $_SESSION['periodi'] = $periodi_db;
    
    
    // OUTPUT PERIODI
    foreach ($periodi_db as $nome => $p) {
    
        if (!empty($p["start_date"]) && !empty($p["end_date"])) {
    
            $start = new DateTime($p["start_date"]);
            $end = new DateTime($p["end_date"]);
    
            echo "<div class='risposta risp_var'>
                    <b>" . ucfirst($nome) . "</b><br>
                    dal <span>" . $formatter->format($start) . "</span>
                    al <span>" . $formatter->format($end) . "</span>
                  </div>";
        }
    }
    
    
    
    // OUTPUT DATA SERVIZIO
    if (!empty($data)) {
    
        $data_grezza = new DateTime($data);
    
        echo "<div class='risposta'>
                Servizi riferiti al <b>" . $formatter->format($data_grezza) . "</b>
              </div>";
    }
    ?>

    le ho messe per blocchi, caso mai adatti il blocco al tuo scopo.

  • Ok, 

    grazie mille,

    oggi ho implementato la update sulla tabella gbgar_periodi. Funziona!  E la pagina imposta_date.php dovrebbe essere  definitiva e pronta ad essere inserita in joomla.

    Ora devo tornare a proseguire con il file Selezione_corse.php

    Manca ormai solo da definire che $data non coincida con nessuna delle date presenti in gbgar_festivita, che non corrisponda ad una domenica, e al famigerato giorno di pasqua e pasquetta.

    Infine devo impostare tutte le SELECT  per differenziare i diversi parametri con cui devono essere eseguite e ottenere la lista corretta di corse in $servizi_da_svolgere (anche se il nome è fuorviante la devo correggere in $corse_da_svolgere) 

    Filippo

  • Rieccomi con una nuova situazione:

    Normalmente con fetch_assoc ottengo da una select un array associativo di valori dove le chiavi sono i nomi delle colonne estratte e i valori sono i valori della colonna relativa alla riga.

    Ma ora ho una select dalla quale estraggo una lista di valori (date).

    Cioè la tabella ha altri campi ma a me servono solo le date che sono registrate nella colonna 'giorno'

    $query_festività = "SELECT giorno FROM gbgar_festivita;";
    $festività = $Conn->query($query_festività);

    Ora mi servirebbe creare un semplice array.

    E poi confrontare la variabilie $data con i valori dell'array per determinare se tra i valori dell'array $festività esiste un valore equivalente a quello $data, per determinare se:

    $giorno='festivo' 
    //oppure
    $giorno='feriale'

    Io ho trovato questa soluzione:

    //estraggo le date festive
    $query_festività = "SELECT giorno FROM gbgar_festivita;";
    $festività = $Conn->query($query_festività);
    
    //creo array con le date delle festività
    $giorno_festivo=[];
    while($row=$festività->fetch_assoc()){
            $giorno_festivo[]=$row['giorno'];
    }
    
    $dayweek=new dateTime("$data_servizio");
    
    //confronto la data di riferimento con quelle dell'array.
    if(in_array($data_servizio,$giorno_festivo)||$dayweek->format('w')==0){
            $giorno_servizio='festivo';
    }else{$giorno_servizio='feriale';}
    
    echo $giorno_servizio."<br>" ;

    Per funzionare funziona.

    Io francamente sono d'accordo con il concetto di sfruttare il lavoro lato server, come suggerito da sihsandrea

    Tuttavia non sono riuscito a capire la sua impostazione che sicuramente è meno prolissa.

    Con l'approccio adottato ora sicuramente ora devo impostare un certo numero di query per estrarre dalla tabella gbgar_corse (tutte le corse papabili durante tutto l'anno), solo le corse inerenti al giorno di riferimento.

    Inserendo la corretta documentazione riguardo al codice inserito, mi pare abbastanza lineare come ragionamento, anche in funzione di modifiche future.

     Buona giornata a tutti e grazie per tutti gli aiuti ricevuti.

    Alla prossima

    Filippo

  • Crea un database di test, ci metti su le tabelle che ti ho indicato (basta lanciare da consolle la create e poi le insert.

    Create le tabelle e riempite di dati di test lanci la query che genera il calendario.

    Vedi cosa adattare al tuo bisogno.

    Creato il calendario, devi creare la vista mezzi filtrata per periodo e gli autisti per periodo. Come nell'altro 3d appena inserisci il mezzo, viene tolto dalla vista mezzi disponibili, idem per gli autisti.

    Consolidi i dati nella tua tabella oraria e se serve fai la modifica (un mezzo in autorimessa o un autista da sostituire).

  • Ho fatto alcune modifiche

    dalla tabella festività inserisco i periodi dopo averla svuotata

    DELETE FROM periodi;
    
    INSERT INTO periodi (nome, data_inizio, data_fine)
    SELECT 
        nome,
        data AS data_inizio,
        (
            SELECT MIN(data)
            FROM festivita f2
            WHERE f2.nome = f1.nome
              AND f2.tipo = 'fine'
              AND f2.data > f1.data
        ) AS data_fine
    FROM festivita f1
    WHERE tipo = 'inizio';

    in questo caso, da festività inserisco le singole date e poi genero i periodi, ma puoi usare direttamente periodi.

    con la tabella periodi la quety di creazione del calendario corse diventa:

    WITH RECURSIVE calendario AS (
        SELECT DATE('2025-01-01') AS giorno
        UNION ALL
        SELECT giorno + INTERVAL 1 DAY
        FROM calendario
        WHERE giorno < '2025-12-31'
    ),
    cal AS (
        SELECT
            c.giorno,
            CASE
                WHEN DAYOFWEEK(c.giorno) = 1
                     OR EXISTS (
                        SELECT 1
                        FROM festivita f
                        WHERE f.data = c.giorno
                          AND f.tipo IN ('FISSO','VARIABILE')
                     )
                THEN 'FESTIVO'
    
                WHEN EXISTS (
                    SELECT 1
                    FROM periodi p
                    WHERE p.nome='scolastico'
                      AND c.giorno BETWEEN p.data_inizio AND p.data_fine
                )
                THEN 'SCOLASTICO'
    
                WHEN EXISTS (
                    SELECT 1
                    FROM periodi p
                    WHERE p.nome='estivo'
                      AND c.giorno BETWEEN p.data_inizio AND p.data_fine
                )
                THEN 'ESTIVO'
    
                ELSE 'NESSUNO'
            END AS tipo_giorno
        FROM calendario c
    )
    
    SELECT
        cal.giorno,
        cal.tipo_giorno,
        COALESCE(m.numero_corse,0) AS numero_corse
    FROM cal
    LEFT JOIN mezzi m
           ON m.tipo_giorno = cal.tipo_giorno
    ORDER BY cal.giorno;

    adattala alla tua struttura di dati e usa eventuali parametri al posto dei dati certi che ho messo io.

  • 18/06/2026 - sihsandrea ha scritto:

    In Italia ci sono 12 +1 festività e una ricade sempre di domenica
    civili e religiose:
    Capodanno (1º gennaio)
    Epifania (6 gennaio)
    Lunedì dell'Angelo / Pasquetta (variabile, il giorno dopo Pasqua)
    Anniversario della Liberazione (25 aprile)
    Festa del Lavoro (1º maggio)
    Festa della Repubblica (2 giugno)
    Assunzione di Maria / Ferragosto (15 agosto)
    Tutti i Santi (1º novembre)
    Immacolata Concezione (8 dicembre)
    Santo Natale (25 dicembre)
    Santo Stefano (26 dicembre) 
    Santo Patrono (variabile)
    A questi dati aggiungi
    Giorni estivi dal
    Giorni estivi al
    Giorni invernali dal
    Giorni invernali al
    Totale 17 record di cui 10 fissi e 7 da aggiornare di anno in anno

    4 Ottobre ?

  • Ciao, ho un problema con questa query suggeritami da Sishandrea:

    Cito la query

    poi ogni anno
    
    
    -- Aggiorna le festività fisse
    UPDATE festivita
    SET data = DATE_FORMAT(CONCAT(YEAR(CURDATE()), '-', MONTH(data), '-', DAY(data)), '%Y-%m-%d')
    WHERE tipo = 'FISSO';
    -- Aggiorna Pasqua e Pasquetta
    UPDATE festivita
    SET data = :D_pasqua
    WHERE NOME = 'PASQUA';
    UPDATE festivita
    SET data = :D_Pasquetta
    WHERE NOME = 'PASQUETTA';
    SELECT * FROM festivita;
    
    
    passi il parametro tipo data 
    
    D_pasqua=easter_date(annodaconsiderare) e D_Pasquetta (D_pasqua+1)
    
    
    tutto lato MySql.
    

    questa sarebbe  la tabella:

    
    MariaDB [gbgarage_test]> SELECT * FROM gbgar_festivita;
    +----------+-----------------------+------------+-----------+
    | ID_FESTA | FESTIVITA             | DATA       | TIPO      |
    +----------+-----------------------+------------+-----------+
    |        1 | capodanno             | 2026-01-01 | fisso     |
    |        2 | epifania              | 2026-01-06 | fisso     |
    |        3 | liberazione           | 2026-04-25 | fisso     |
    |        4 | lavoratori            | 2026-05-01 | fisso     |
    |        5 | repubblica            | 2026-06-02 | fisso     |
    |        6 | ferragosto            | 2026-08-15 | fisso     |
    |        7 | san francesco         | 2026-10-04 | fisso     |
    |        8 | ogni santi            | 2026-11-01 | fisso     |
    |        9 | immacolata concezione | 2026-12-08 | fisso     |
    |       10 | natale                | 2026-12-25 | fisso     |
    |       11 | santo stefano         | 2026-12-26 | fisso     |
    |       12 | pasqua                | 2026-04-05 | variabile |
    |       13 | pasquetta             | 2026-04-06 | variabile |
    +----------+-----------------------+------------+-----------+
    13 rows in set (0,001 sec)
    

    1° problema:

    non ho capito bene come passo i parametri alla query per quanto riguarda l'aggiornamento delle date festive variabili.

    Nel senso che io la query la devo innescare usando una input di un form. 

    Se la input è riempita deve essere eseguita la query update sulla tabella di cui sopra.

    Per ora lascio perdere l'idea di automatizzare la query al 1 gennaio o roba del genere.

    Prima devo capire come gestirla manulamente da console mysql e da php

     Il dati,  di una input quindi arriva via $_Post allo script che compie varie operazioni, e dal momento che esiste già, e compie vari aggiornamenti su altre tabelle, mi costa poco aggiungere tre query per aggiornare le date festive fisse e variabili.

    Ma non ho capito bene come devo fare perché qua mi viene suggerito di fare tutto lato mysql ma easter_date è una funzione php. Mi spiegate meglio sintatticamente dovrei costruirla?

    Facendo finta di eseguire questa update direttamente in console mysql tanto per capire come deve funzionare, come dovrei scriverla per passare quei parametri. ?

    Insomma non riesco a capire come sfruttare questo suggerimento.

    secondo problema:

    La tabella festività mi serve per avere una base di dati che vengono prelevati e confrontati con la $data_servizio, per determinare se essa è festiva o feriale.

    Tuttavia, i servizi che vengono inviati negli ultimi giorni dell'anno solare ma riferiti alle prime date del nuovo anno, devono poter contare su una tabella festività che contempli le date festive del nuovo anno anche se esso non è ancora iniziato. 

    In pratica il momento ideale per aggiornare la tabella è uno dei giorni compresi tra il 26 e il 31 dicembre.
    Cioè subito dopo l'ultimo giorno festivo fisso, cosicché se devono essere assegnati servizi per i primi gg del nuovo anno le date  festive sarebbero già aggiornate.

    Quindi secondo me aggiornare le date festive fisse con l'istruzione curdate non è utilizzabile cosi come suggerita.

    O posso usare una cosa tipo:

    SET data = DATE_FORMAT(CONCAT(YEAR+1(CURDATE()), '-', MONTH(data), '-', DAY(data)), '%Y-%m-%d')
    WHERE tipo = 'FISSO';

    o una cosa del genere?

    Se non ho capito male questa query prende in considerazione il fatto che venga eseguita nell'anno che interessa mentre servirebbe invece che venisse eseguita qualche giorno prima, quindi quando l'anno corrente è ancora quello precedente.

    Grazie per i suggerimenti.

    Filippo P.

  • C'e' un modo un po' piu' facile, forse, invece di insert/update/delete/.. stored procedures, ed arzigogoli vari:

    1) ti prepari un file CSV con la stessa struttura della tabella

    2) lo popoli con le varie festivita: lo aggiusti ogni volta che ti serve, aggiungendo, togliendo, .. con un normale editor di testi (notepad)

    3) cancelli il contenuto della tabella ("DELETE FROM <tabella>)

    4) import il contenuto del CSV

    fatto.

    quante volte capitera' all'anno? un paio?

    Qualche trucco MA SOLO come suggerimento:

    SE  la festivita cade ad un giorno/mese fisso, puoi escludere i controlli sull,anno. In questo caso, puoi mettere come anno, che ne so, 1900, SE ti e; facile implementare una cosa del genere. In questo caso, ad esempio "FISSO" non ti serve, lo sai per via dell'anno (1900).

    Ora, se l'anno e' il 1900, per sapere se la data e' FISSA, basta controllare che sia PRECEDENTE al 1 gennaio 1901

    La tabella con le date la aggiorni A MANO, QUANDO SERVE, non ti metti a fare form, o arzigogoli vari. La tabella, una volta popolata, non ti serve aggironarla ogni 10 minuti!

    A MANO significa che usi il client per accedere al MariaDB (il DBMS,  NON il database) ed esegui A MANO gli statement SQL.
    E si' ti tocchera "studiare" la documentazione sull'SQL di MariaDB, che cosa e' e come funziona.

  • Ciao grazie per la risposta ma il form esiste già e ha già varie funzioni e cmq mi serve perché chi dovrà utilizzarlo deve gestire delle cose deve aggiornare le tabelle che vanno aggiornate con un click.

    l'approccio attuale del progetto deve restare quello.

    chiedo solo come modificare la query per aggiornare le date festive cambiando di fatto solo l'anno della data nelle. date fisse e 

    come gestire le date delle feste variabili di Pasqua e Pasquetta.

    buona giornata.

    Filippo P.

  • Mi sa che hai fatto un mix dei suggerimenti che ti ho dato.

    quando dico fai fare a mysql intendo che da php passi la query ma con i valori calcolati da php.

    UPDATE festivita
    SET data = :D_pasqua
    WHERE nome='PASQUA';

    non va scritta da console mysql

    da console diventa:

    SET @D_pasqua = '2027-03-28';
    
    UPDATE gbgar_festivita
    SET data = @D_pasqua
    WHERE festivita = 'pasqua';

    invece in php scrivi:

    $pasqua = date('Y-m-d', easter_date($anno));
    
    $stmt = $pdo->prepare("
        UPDATE gbgar_festivita
        SET data = :D_pasqua
        WHERE festivita = 'pasqua'
    ");
    
    $stmt->execute([
        ':D_pasqua' => $pasqua
    ]);

    visto che devi passare una data parametro da php a mysql usi :D_pasqua (o D_pasquetta) che ti sei ricavato con la funzione php 

    $pasqua = date('Y-m-d', easter_date($anno));
    $pasquetta = date(
        'Y-m-d',
        strtotime($pasqua.' +1 day')
    );

    A questo punto hai

    $pasqua = "2027-03-28";
    $pasquetta = "2027-03-29";

    ovviamente, puoi organizzare i comandi come meglio credi

    alle porte dell'autunno, dell'inverno, della primavera o dell'estate. cambi i parametri della query che php passa a mysql.

    quando ho fatto il calendario ho messo dal 1/1 al 31/12 ma nulla vieta di fare dal 1/9 al 31/12 e dal 1/1/al 30/06

  • 28/07/2026 - pierpippo ha scritto:

    secondo problema:

    La tabella festività mi serve per avere una base di dati che vengono prelevati e confrontati con la $data_servizio, per determinare se essa è festiva o feriale.

    Tuttavia, i servizi che vengono inviati negli ultimi giorni dell'anno solare ma riferiti alle prime date del nuovo anno, devono poter contare su una tabella festività che contempli le date festive del nuovo anno anche se esso non è ancora iniziato. 

    In pratica il momento ideale per aggiornare la tabella è uno dei giorni compresi tra il 26 e il 31 dicembre.
    Cioè subito dopo l'ultimo giorno festivo fisso, cosicché se devono essere assegnati servizi per i primi gg del nuovo anno le date  festive sarebbero già aggiornate.

    YEAR(CURDATE())

    usa sempre l'anno corrente vale se lo fai al primo gennaio.

    per date imposte:

    da html nel form serve un input

    <input type="number" name="anno" value="2028">

    in invio dell'input su php:

    $anno = (int)$_POST['anno'];
    $pasqua = date('Y-m-d', easter_date($anno));
    $pasquetta = date('Y-m-d', strtotime('+1 day', strtotime($pasqua)));

    da questa data che hai imposto fai quello che serve senza usare curdate

    $sql = "
    UPDATE gbgar_festivita
    SET data = STR_TO_DATE(
            CONCAT(:anno,'-',MONTH(data),'-',DAY(data)),
            '%Y-%m-%d'
    )
    WHERE tipo='fisso'
    ";
    
    $stmt = $pdo->prepare($sql);
    
    $stmt->execute([
        ':anno' => $anno
    ]);

    poi la pasqua

    $sql = "
    UPDATE gbgar_festivita
    SET data = :pasqua
    WHERE festivita = 'pasqua'
    ";
    
    $stmt = $pdo->prepare($sql);
    
    $stmt->execute([
        ':pasqua' => $pasqua
    ]);

    e pasquetta

    $sql = "
    UPDATE gbgar_festivita
    SET data = :pasquetta
    WHERE festivita = 'pasquetta'
    ";
    
    $stmt = $pdo->prepare($sql);
    
    $stmt->execute([
        ':pasquetta' => $pasquetta
    ]);
  • Grazie per il tuo puntuale aiuto,

    anzi scusa per il ritardo ma negli ultimi gg non ho avuto molto tempo da passare al pc per viaggi e insomma lavoro.

    Tra l'altro avevo anche altre cose da sistemare che mi hanno dato qualche problema. Per cui ho tralasciato momentaneamente di implementare lo script per l'aggiornamento della tabella "festività":

    Te ne parlo brevemente perchè la cosa mi ha incuriosito un poco e nn ne conosco il motivo.

    In PHP se inserisco una condizione tipo if dove le if sono diverse, sapevo che usare if o elseif fosse indifferente.

    per esempio prendendo questo scorcio di codice:

    if($data_servizio >= $inizio_invernale && $data_servizio<$inizio_natale){
            $orario_in_vigore="invernale";
            //echo $orario_in_vigore;
    }if($data_servizio>$fine_natale && $data_servizio<$inizio_pasqua){
            $orario_in_vigore="invernale";
            //echo $orario_in_vigore;
    }if($data_servizio>$fine_pasqua && $data_servizio<=$fine_invernale){
            $orario_in_vigore="invernale";
            //echo $orario_in_vigore;
    }if($data_servizio>=$inizio_natale && $data_servizio<=$fine_natale){
            $orario_in_vigore="natalizio";
            //echo $orario_in_vigore;
    }if($data_servizio>=$inizio_pasqua && $data_servizio<=$fine_pasqua){
            $orario_in_vigore="pasquale";
            //echo $orario_in_vigore;
    }else{$orario_in_vigore="estivo";
            //echo $orario_in_vigore;
    }

    Inizialmente era composto dalla prima condizione if e le altre scritte come elseif e infine la else.

    sembrava funzionare ma mi dava dei problemi quando lo ho trasportato in joomla. 

    Quando poi ho messo solo if invece di elseif (come leggi sopra), lasciando quindi solo la else finale, le "echo" mi hanno dato la risposta giusta in base al valore di $data_servizio.

    Poi le "echo" ho messe sotto commento perchè in realtà nn mi servono: le usavo solo per fare delle prove.

    Insomma else if si usa solo nel classico caso in cui ho una condizione principale (if), una alternativa (elseif) e la condizione in cui nessuna delle precedenti è soddisfatta.

    Se invece le condizioni da verificare sono maggiori uso solo if ed eventualmente else alla fine?

    Buona giornata.

    Filippo.

  • If condizione then istruzione

    Logica in italiano:

    Se finisci i compiti allora puoi giocare fuori

    Condizione: finisci i compiti

    Istruzione: puoi giocare fuori

    Aggiungiamo un'altra condizione

    If condizione then istruzione1 elseif condizione then istruzione2

    Se finisci i compiti allora puoi giocare fuori altrimenti se piove gioca col la PlayStation 

    In questa frase esiste solo una interruzione.

    Finiti i compiti? No fine non va oltre

    Finiti i compiti? Si fuori piove? No gioco fuori fine!

    Finiti i compiti? Si fuori piove? Si gioga con la PlayStation fine!

    Quell'else che metti alla fine è un'alternativa senza condizione, ovvero, se non viene soddisfatta alcuna condizione.

    Esempio telegrafico:

    Se finisci fuori altrimenti se piove PlayStation altrimenti TV.

    Qui finisce il comando che è uno solo non più istruzioni (istruzione1,2...n).

    Tu hai scritto N comandi if non un solo comando.

    Tu fai:

    if($data_servizio >= $inizio_invernale){ //se Vero
    $orario_in_vigore="invernale";
    } Fine!
    //Idem come sopra ma feste diverse...                if($data_servizio>$fine_natale && $data_servizio<$inizio_pasqua){
                            $orario_in_vigore="invernale";
                                    //echo $orario_in_vigore;
                                    }if($data_servizio>$fine_pasqua && $data_servizio<=$fine_invernale){
                                            $orario_in_vigore="invernale";
                                                    //echo $orario_in_vigore;
                                                    }if($data_servizio>=$inizio_natale && $data_servizio<=$fine_natale){
                                                            $orario_in_vigore="natalizio";
                                                                    //echo $orario_in_vigore;
                                                                    }
                                                                    //Supponiamo che era vero il primo if //"invernale"
                                                                    if($data_servizio>=$inizio_pasqua)
                                                                    { // Non è vero perché la data 
                                                                     //è"invernale
                                                                            $orario_in_vigore="pasquale";
                                                                                    //echo $orario_in_vigore;
                                                                                    }
                                                                                    else{
    //Se falso e lo è perché la data 
    //risulta "invernale impostata con
    // La prima if                                                                             
    // Esegue il comando o istruzione                                                                              $orario_in_vigore="estivo";
    // E mette "estivo"                                            
                                                                          }
                                                                       
                                                                                                                           
                                                                                                                                                                                                                                         
         
                                                                          
                                                                                                                                                                                                                                                                                                          
Devi accedere o registrarti per scrivere nel forum
60 risposte