Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it L'avatar di Sonikag
    Registrato dal
    Mar 2004
    Messaggi
    2,080

    Problema ciclo do while

    Dunque:
    Oggi: 2023-05-19
    Periodo iniziale: 2019-02-11
    Periodo finale: 2020-02-10

    Bene... devo aumentare di un anno periodo iniziale e finale fino a quando la data i oggi non è compresa per cui ho fatto così:

    Codice PHP:
    echo "Oggi: " $dataOggi " periodo i: " $periodoi " periodo f: " .$periodof "<br>";

    if (!((
    $dataOggi >= $periodoi)&&($dataOggi<=$periodof))){

        do {
         
    $periodoi strtotime ('+1 year' strtotime ($periodoi));
         
    $periodoi date 'Y-m-d' $periodoi );
         
    $periodof strtotime ('+1 year' strtotime ($periodoi));
         
    $periodof date 'Y-m-d' $periodof );   
         echo 
    "Oggi: " $dataOggi " periodo i: " $periodoi " periodo f: " .$periodof "<br>";  
          } 
          while ((
    $dataOggi <= $periodof)&&($dataOggi >= $periodoi));        
       

    L'output è questo:
    Oggi: 2023-05-19 periodo i: 2019-02-11 periodo f: 2020-02-10
    Oggi: 2023-05-19 periodo i: 2020-02-11 periodo f: 2021-02-11

    Si ferma sempre dopo il primo giro! (il primo echo è fuori del while)

    Sono sicura che sarà una banalità
    Grazie

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,445
    Fa solo un giro perché la condizione è subito falsa ed esce.
    Cambia così
    Codice PHP:
    while (!(($dataOggi <= $periodof)&&($dataOggi >= $periodoi))); 
    Edit:
    hai anche questo problema
    Codice PHP:
    $periodof strtotime ('+1 year' strtotime ($periodoi)); 
    Non dovrebbe essere così?
    strtotime ($periodof)
    Ultima modifica di Alhazred; 19-05-2023 a 20:44

  3. #3
    Utente di HTML.it L'avatar di Sonikag
    Registrato dal
    Mar 2004
    Messaggi
    2,080
    Sul secondo punto ok! Non me ne ero accorta , ma il problema rimane.
    Non dovrebbe essere subito falsa la condizione.

    Oggi: 2023-05-19 periodo i: 2020-02-11 periodo f: 2021-02-11

    codice:
    (($dataOggi <= $periodof)&&($dataOggi >= $periodoi));
    La data di oggi 19-05-2023 NON è minore o uguale al 2021-02-11
    mentre è vera la seconda condizione, ma io voglio che siano vere tutte e due!

    Sonia

  4. #4
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,445
    Quote Originariamente inviata da Sonikag Visualizza il messaggio
    ...
    La data di oggi 19-05-2023 NON è minore o uguale al 2021-02-11
    ...
    Quindi vuol dire che la condizione non essendo soddisfatta è falsa e il ciclo termina.
    Il ciclo do...while prosegue finché la condizione è vera, quando diventa falsa si ferma.

  5. #5
    Utente di HTML.it L'avatar di Sonikag
    Registrato dal
    Mar 2004
    Messaggi
    2,080
    Ok non ci sto capendo nulla!
    Come faccio a farlo fermare quando le date sono comprese in entrambe le condizioni?
    Perchè se mettessi un ! (not) potrebbe sempre essere vera una e falsa l'altra, io ho bisogno che il ciclo finisca con le due condizioni vere!

  6. #6
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,445
    Difatti c'è l'and che richiede la verifica di entrambe, non si ferma solo se è vera una, devono essere vere entrambe perché l'and sia verificato.
    Con l'and ci si ferma alla prima condizione solo se questa è falsa, essendo falsa la prima non avrebbe senso verificare la seconda; qualsiasi fosse il responso, il tutto risulterebbe falso, ma se la prima è vera, la seconda deve essere controllata e solo se è vera anche questa è vera tutta la condizione.
    Con l'and non puoi avere una condizione vera se una è vera l'altra è falsa.
    Prova con la modifica che ti ho proposto sopra, cambia le date come secondo te NON dovrebbe funzionare e vedi come va.
    Ultima modifica di Alhazred; 22-05-2023 a 16:39

  7. #7
    Utente di HTML.it L'avatar di Sonikag
    Registrato dal
    Mar 2004
    Messaggi
    2,080
    Uguale
    Ti posto il codice completo
    codice:
       echo "Oggi: " . $dataOggi . " periodo i: " . $periodoi . " periodo f: " .$periodof . "<br>";
       
       if (!(($dataOggi >= $periodoi)&&($dataOggi<=$periodof))){
    
        do {
         $periodoi = strtotime ('+1 year' , strtotime ($periodoi));
         $periodoi = date ( 'Y-m-d' , $periodoi );
         $periodof = strtotime ('+1 year' , strtotime ($periodof));
         $periodof = date ( 'Y-m-d' , $periodof );   
         echo "Oggi: " . $dataOggi . " periodo i: " . $periodoi . " periodo f: " .$periodof . "<br>";  
        } while (!(($dataOggi <= $periodof)&&($dataOggi >= $periodoi)));  
        
       
    }
    L'output è questo

    Oggi: 2023-05-22 periodo i: 2019-02-11 periodo f: 2020-02-10 // questo è l'echo prima del ciclo
    Oggi: 2023-05-22 periodo i: 2020-02-11 periodo f: 2021-02-10

  8. #8
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,445
    Secondo me c'è qualche altra cosa nel tuo codice, io ho questo
    Codice PHP:
    $dataOggi '2023-05-22';
    $periodoi '2019-02-11';
    $periodof '2020-02-10';

    echo 
    "Oggi: " $dataOggi " periodo i: " $periodoi " periodo f: " .$periodof "<br>";
       
    if (!((
    $dataOggi >= $periodoi)&&($dataOggi<=$periodof))){

        do {
             
    $periodoi strtotime ('+1 year' strtotime ($periodoi));
             
    $periodoi date 'Y-m-d' $periodoi );
             
    $periodof strtotime ('+1 year' strtotime ($periodof));
             
    $periodof date 'Y-m-d' $periodof );   
             echo 
    "Oggi: " $dataOggi " periodo i: " $periodoi " periodo f: " .$periodof "<br>";  
        } while (!((
    $dataOggi <= $periodof)&&($dataOggi >= $periodoi)));  

    e l'output è
    codice:
    Oggi: 2023-05-22 periodo i: 2019-02-11 periodo f: 2020-02-10
    Oggi: 2023-05-22 periodo i: 2020-02-11 periodo f: 2021-02-10
    Oggi: 2023-05-22 periodo i: 2021-02-11 periodo f: 2022-02-10
    Oggi: 2023-05-22 periodo i: 2022-02-11 periodo f: 2023-02-10
    Oggi: 2023-05-22 periodo i: 2023-02-11 periodo f: 2024-02-10

  9. #9
    Utente di HTML.it L'avatar di Sonikag
    Registrato dal
    Mar 2004
    Messaggi
    2,080
    Grazie tante ho risolto il probelma
    Non riesco a trovare la differenza , ma adesso bisogna che me lo studi un pochino per capire!
    Grazie mille

Tag per questa discussione

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 © 2024 vBulletin Solutions, Inc. All rights reserved.