• User Newbie

    [Risolto] aggiungere giorni

    ho una data nel formato YYYY-mm-dd

    devo aggiungere a questa data un certo numero di giorni
    come posso fare???

    :ciauz:


  • Super User

    Ciao, benvenuto nel forum 🙂

    Tieni uno scriptino fatto al volo 🙂

    In pratica devi lavorare considerando i millisecondi trascorsi.

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Sommare giorni ad una data</title>
    <script language="JavaScript" type="text/JavaScript">
    <!-- 
    function calcola(){
    /*
    Script javascript per la sommare giorni ad una data realizzato da Claudioweb 
    Claudio Matarrelli [email protected]
    */
    
        var dataOggi = new Date()
        
        document.form.oggi.value = dataOggi.getFullYear() + "-"+ dataOggi.getMonth() +"-"+ dataOggi.getDate();
        
        // millisecondi trascorsi fino ad ora dal 1/1/1970
        var oggimilli = dataOggi.getTime();
        
        // valore in millisecondi dei giorni da aggiungere
        var millisecondi = 24 * 60 * 60 * 1000 * document.form.giorni.value;
        
        //millisecondi alla data finale
        var milliseTotali = millisecondi + oggimilli;
        
        //data finale in millisecondi
        var dataFutura = new Date(milliseTotali);
        
        document.form.futuro.value = dataFutura.getFullYear() + "-"+ dataFutura.getMonth() +"-"+ dataFutura.getDate(); 
    }
    -->
        </script>
    </head>
    <body onload="calcola();">
    <form name="form">
        <p>Data oggi<br />
            <input name="oggi" type="text" readonly="readonly" />
        </p>
        <p>
            <label> </label>
            <label>Giorni da sommare<br />
            <input name="giorni" type="text" value="0" onkeyup="calcola();" />
            </label>
        </p>
        <p>Data futura <br />
            <input name="futuro" type="text" readonly="readonly" />
        </p>
    
    </form>
    </body>
    </html>
    
    

    :ciauz:


  • User Attivo

    Ciao Claudioweb
    ho visto il tuo script, e non essendo un mago di js, ti chiedo se puoi aiutarmi.
    Lo script mi presenta il mese di aprile nella forma (2009-4-19), deduco che bisogna correggere un valore, ma quale?
    Quello che mi chiedo è: è possibile fare il calcolo delle scadenze (es. mensile, bimestrale, semestrale...) senza dover aggiungere nel form a mano i giorni per il conteggio? A me viene in mente che se assegno una variabile a mensile o a bimestrale potrebbe funzionare, ma come farlo fare in automatico?
    Esempio: inserisco data1 '2009-05-19' e se fosse a scadenza annuale vorrei visualizzare in data2 '2010-05-19', se mensile '2009-06-19' ecc.. ecc..
    Grazie in anticipo!


  • Super User

    Ciao 🙂

    Puoi cambiare l'ordine delle data modificando questa riga:

    document.form.oggi.value = dataOggi.getFullYear() + "-"+ dataOggi.getMonth() +"-"+ dataOggi.getDate();
    
    

    Ad esempio così:

    document.form.oggi.value = dataOggi.getDate() + "-"+ dataOggi.getMonth() +"-"+ dataOggi.getFullYear();
    
    

    Riguardo alla scadenza in automatico non ho capito bene cosa intendi.
    Forse ti basta sostituire document.form.giorni.value con una variabile impostata a tuo piacimento.

    Ad ogni modo ti consiglio una lettura di una guida di base di javascript. Sono operazioni abbastanza semplici da fare e una breve lettura potrà chiarirti molte cose. 😉


  • User Attivo

    Ciao,credo di essermi spiegato male, il fatto è che a me visualizza la data di aprile (2009-04-19) non maggio.
    Per la questione dell'automatico, cerco di spiegarmi meglio.
    Quello che vorrei è:
    riempire un form con una data 2008-06-25 e automaticamente, se la scadenza è annuale, nel campo sottostante appare la data 2009-06-25 frutto del calcolo javascript, quello che mi chiedo è, come assegnare alla scadenza annuale il valore $anno?

    grazie


  • Super User

    Capito, c'era una piccola svista. Il metodo relativo ai mesi parte da zero per simmetria con un eventuale array con i nomi del mese.

    L'utente predente era sparito, senza segnalare il problema.

    Ora è corretto:

    <!DOCTYPE  html PUBLIC "-//W3C//DTD  XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Sommare giorni ad una data</title>
    <script language="JavaScript" type="text/JavaScript">
    <!-- 
    function calcola(){
    /*
    Script  javascript per la sommare giorni ad una data realizzato da Claudioweb 
    Claudio Matarrelli [email protected]
    */
    
        var dataOggi = new Date()
    
        document.form.oggi.value = dataOggi.getFullYear() + "-"+ parseInt(dataOggi.getMonth()+1) +"-"+ dataOggi.getDate();
        
        // millisecondi trascorsi fino ad ora dal 1/1/1970
        var oggimilli = dataOggi.getTime();
        
        // valore in millisecondi dei giorni da aggiungere
        var millisecondi = 24 * 60 * 60 * 1000 * document.form.giorni.value;
        
        //millisecondi alla data finale
        var milliseTotali = millisecondi + oggimilli;
        
        //data finale in millisecondi
        var dataFutura = new Date(milliseTotali);
        
        document.form.futuro.value = dataFutura.getFullYear() + "-"+ parseInt(dataFutura.getMonth()+1) +"-"+ dataFutura.getDate(); 
    }
    -->
        </script>
    </head>
    <body onload="calcola();">
    <form name="form">
        <p>Data oggi<br />
            <input name="oggi" type="text" readonly="readonly" />
        </p>
        <p>
            <label> </label>
            <label>Giorni da sommare<br />
            <input name="giorni" type="text" value="0" onkeyup="calcola();" />
            </label>
        </p>
        <p>Data futura <br />
            <input name="futuro" type="text" readonly="readonly" />
        </p>
    
    </form>
    </body>
    </html>
    

    Così adattato fa quello che desideri:

    <!DOCTYPE  html PUBLIC "-//W3C//DTD  XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Sommare giorni ad una data</title>
    <script language="JavaScript" type="text/JavaScript">
    <!-- 
    function calcola(){
    /*
    Script  javascript per la sommare giorni ad una data realizzato da Claudioweb 
    Claudio Matarrelli [email protected]
    */
    
        var dataOggi = new Date()
    
        document.form.oggi.value = dataOggi.getFullYear() + "-"+ parseInt(dataOggi.getMonth()+1) +"-"+ dataOggi.getDate();
        
        // millisecondi trascorsi fino ad ora dal 1/1/1970
        var oggimilli = dataOggi.getTime();
        
        //giorni da sommare
        giornidasommare = 365;
        
        // valore in millisecondi dei giorni da aggiungere
        var millisecondi = 24 * 60 * 60 * 1000 * giornidasommare;
        
        //millisecondi alla data finale
        var milliseTotali = millisecondi + oggimilli;
        
        //data finale in millisecondi
        var dataFutura = new Date(milliseTotali);
        
        document.form.futuro.value = dataFutura.getFullYear() + "-"+ parseInt(dataFutura.getMonth()+1) +"-"+ dataFutura.getDate(); 
    }
    -->
        </script>
    </head>
    <body onload="calcola();">
    <form name="form">
        <p>Data oggi<br />
            <input name="oggi" type="text" readonly="readonly" />
        </p>
        <p>
    
        </p>
        <p>Data futura <br />
            <input name="futuro" type="text" readonly="readonly" />
        </p>
    
    </form>
    </body>
    </html>
    

    Per altre eventuali personalizzazioni non posso che rimandarti ad una buona guida 😉


  • User Attivo

    Ciao,
    grazie per la collaborazione, inizio a studiare, l'idea è quella di selezionare nel primo campo una data da jscalendar e, in automatico, assegnando la variabile (es. bimestrale), scrivere sul secondo campo la data + 2 mesi.