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

    Consiglio per migliorare un codice che funziona

    Dunque ho dei contratti di manutenzione della durata da 1 a più anni e in ogni contratto sono previste annualmente delle parti di ricambio.

    Esempio:
    Conratto dal 16/11/2020 al 15/11/2023

    Le parti incluse sono per i periodi:
    dal 16/11/2020 al 15/11/21
    dal 16/11/2021 al 15/11/22
    dal 16/11/2023 al 15/11/23

    ---

    Dovendo individuare il periodo in corso ho fatto così:

    Codice PHP:
    // $datainizio è la data iniziale del contratto

       
    $dataOggi date("Y-m-d");
       
    $periodoi $datainizio;
       
       
    $periodof strtotime ('+1 year' strtotime ($periodoi));
       
    $periodof date 'Y-m-d' $periodof );
       
    $periodof strtotime '-1 day' strtotime ($periodof));
       
    $periodof date 'Y-m-d' $periodof );
       
       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 );   
         } while ((
    $dataOggi >= $periodoi)&&($dataOggi<=$periodof));    
           
        } 
    Di fatto tutto funziona, ma non sono convintissima!!!
    Accetto critiche e consigli.
    Grazie

  2. #2
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    191
    Ciao Sonikag io credo che non è ciò che vuoi.
    Dentro al ciclo do-while significa verrà valuta almeno una volta, lì devi prelevare il tuo output subito dopo la parentesi graffa (non in basso while ma in alto).
    Non esiste limite perché si può sempre migliorare indipendentemente se funziona o meno.
    Per data fine se fai lo sottrazione di meno un giorno una sola volta perché non ti aspetti che dopo la prima iterazione sia esattamente la differenza annuale?

    Puoi impostare il timezone mettendo il codice in alto
    Codice PHP:
    date_default_timezone_set('UTC'); 
    Per data fine se vuoi il giorno prima dopo la prima iterazione devi utilizzare nuovamente date meno un giorno (il che significa crea involucro array con indice numerico per $periodof e $periodoi poiché devi modificare il valore)

    dal 16/11/2020 al 15/11/21
    dal 16/11/2021 al 15/11/22
    dal 16/11/2023 al 15/11/23

    L'output corretto è :
    dal 16/11/2020 al 15/11/21
    dal 16/11/2021 al 15/11/22
    dal 16/11/2022 al 15/11/23

    Durata contratto dal 16/11/2020 al 15/11/23
    Ultima modifica di darbula; 16-11-2022 a 23:09

  3. #3
    Utente di HTML.it L'avatar di Sonikag
    Registrato dal
    Mar 2004
    Messaggi
    2,080
    Quote Originariamente inviata da darbula Visualizza il messaggio
    Ciao Sonikag io credo che non è ciò che vuoi.
    Dentro al ciclo do-while significa verrà valuta almeno una volta, lì devi prelevare il tuo output subito dopo la parentesi graffa (non in basso while ma in alto).
    Grazie!
    Di fatto non viene fatto almeno una volta in quanto è dentro l'if che lo fa solo se la data odierna NON è inclusa nel periodo.
    Ma non ho capito cosa intendi.
    La sintassi mi pare di capire che il DO sia sempre prima del while.


    [QUOTE]Puoi impostare il timezone mettendo il codice in alto
    Codice PHP:
    date_default_timezone_set('UTC'); 
    Quello a prescindere lo metto sempre nell'header!

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    191
    Intendo dire che l'intervallo non è proprio come lo mostri nel tuo output ma bensì dal 16 al 15 poi dal 16 al 16 e poi ancora dal 16 al 16, non è rilevante se il do-while è con il periodo incluso.
    Se vuoi inizio e fine come mostrato qui
    L'output corretto è :
    dal 16/11/2020 al 15/11/21
    dal 16/11/2021 al 15/11/22
    dal 16/11/2022 al 15/11/23
    Il tuo codice prevede il 15 solo alla prima iterazione altrimenti usa solo +1 year.

    Mentre se vuoi:
    L'output corretto è (il codice attuale) :
    dal 16/11/2020 al 15/11/21
    dal 16/11/2021 al 16/11/22
    dal 16/11/2022 al 16/11/23

    Codice PHP:
    <?php
    date_default_timezone_set
    ('UTC');
    $datainizio '2020-11-17';
    $i 0;
    // $datainizio è la data iniziale del contratto

       
    $dataOggi date("Y-m-d");
       
    $periodoi $datainizio;
       
       
    $periodof strtotime ('+1 year' strtotime ($periodoi));
       
    $periodof date 'Y-m-d' $periodof );
       
    $periodof strtotime '-1 day' strtotime ($periodof));
       
    $periodof date 'Y-m-d' $periodof );
       
       if (!((
    $dataOggi >= $periodoi)&&($dataOggi <= $periodof))){

        do {
         
    $arr[$i] = array($periodoi$periodof);
         
    $i++;
         
    $periodoi strtotime ('+1 year' strtotime ($periodoi));
         
    $periodoi date 'Y-m-d' $periodoi );
         
    $periodof strtotime ('+1 year' strtotime ($periodoi));
         
    $periodof date 'Y-m-d' $periodof );   
         } while ((
    $dataOggi >= $periodoi)&&($dataOggi <= $periodof));    
           
        
    var_dump($arr);
        } 

    ?>
    Ultima modifica di darbula; 17-11-2022 a 15:19

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