[JAVASCRIPT] Aggiungere giorni, mesi, anni a una data (con controllo validità data).

Codice da inserire nel tag <head>

<script type="text/javascript">// <![CDATA[
function DataValida(stringa, formatoItaliano){
 
 
                if (stringa.length != 10) {
                    return false;
                }
 
                var i;
                for (i = 0; i < stringa.length; i++) {
                    var c = stringa.charAt(i);
                    // posizione 2 e 5 devono essere /.
                    if ((i == 2 && c != "/") || (i == 5 && c != "/")) {
                        return false;
                    }
                    // le altre devono essere numeri.
                    if ((i != 2 && i != 5) && ((c < "0") || (c > "9"))) {
                        return false;
                    }
                }
 
                var splittata = stringa.split("/");
                if (formatoItaliano == true) {
                    var gg = new Number(splittata[0])
                    var mm = new Number(splittata[1])
                }
                else {
                    var mm = new Number(splittata[0])
                    var gg = new Number(splittata[1])
                }
                var aa = new Number(splittata[2])
 
                /*Controllo mesi*/
                if (mm < 1 || mm > 12) {
                    return false;
                }
 
                //Bisestile
                bisestile = false;
                if (((aa % 4 == 0) && ((!(aa % 100 == 0)) || (aa % 400 == 0)))) {
                    bisestile = true;
                }
 
                var arrMesi = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
                var maxg = arrMesi[mm - 1];
                if ((mm == 2 && bisestile == true)) {
                    maxg = 29;
                }
 
                if (gg > maxg || gg == 0) {
                    return false;
                }
 
                return true;
 
            }
 
 
            function dateAdd(){
                /*Formato data (variabile itaform true se formato gg/mm/aaaa false se formato mm/gg/aaaa) */
                var itaform = false;
                if (document.myform.formato[0].checked == true) {
                    itaform = true
                }
 
                j_data = document.myform.dataorigine.value
 
                /*Verifico che la data sia valida  */
                if (DataValida(j_data, itaform) == false) {
                    alert('Data non valida');
                    return false;
                }
 
                /*Inverto giorno e mese per il calcolo */
                if (itaform != false) {
                    var splittata = j_data.split("/");
                    j_data = (splittata[1] + "/" + splittata[0] + "/" + splittata[2]);
                }
 
                /*Verifico il valore da aggiungere sia intero numerico e diverso da 0*/
                j_increm = parseInt(document.myform.incremento.value)
                t_increm = document.myform.incremento.value;
                if (isNaN(j_increm) || j_increm == '0' || j_increm == '' || j_increm != t_increm) {
                    alert('Valore da aggiungere non valido');
                    return false;
                }
                /*Estraggo il tipo di intervallo (variabile : t_intervallo) */
                for (var i = 0; i < document.myform.tipo.length; i++) {
                    if (document.myform.tipo.options[i].selected == true) {
                        var t_intervallo = document.myform.tipo.options[i].value;
                        break;
                    }
                }
                /*Effettuo il calcolo */
                j_increm = new Number(j_increm);
                var dt = new Date(j_data);
 
                switch (t_intervallo) {
                    case "m":{// mesi
                        dt.setMonth(dt.getMonth() + j_increm);
                        break;
                    }
                    case "y":{// anni
                        dt.setFullYear(dt.getFullYear() + j_increm);
                        break;
                    }
                    case "d":{// giorni
                        dt.setDate(dt.getDate() + j_increm);
                        break;
                    }
                }
                giorno = dt.getDate(dt)
                if (giorno < '10') {
                    giorno = '0' + giorno
                }
                mese = dt.getMonth(dt) + 1
                if (mese < '10') {
                    mese = '0' + mese
                }
                anno = dt.getFullYear(dt)
                if (itaform == true) {
                    document.myform.datafinale.value = giorno + "/" + mese + "/" + anno;
                }
                else {
                    document.myform.datafinale.value = mese + "/" + giorno + "/" + anno;
                }
                return true;
            }
// ]]></script>

 Codice da inserire nel tag <body>

<form method="post" name="myform">
  <!-- Listbox con il tipo di intervallo da aggiungere -->
 Intervallo 
<select name="tipo"><option value="d">Giorni</option><option value="m">Mesi</option><option value="y">Anni</option></select>
 Data origine 
<input type="text" name="dataorigine" value="" />
  <!-- Data di partenza (formato: dd/mm/yyyy) -->
 Tipo formattazione 
 gg/mm/aaaa<input type="radio" name="formato" value="1" checked="checked" />
  <!-- formato: dd/mm/yyyy --> mm/gg/aaaa<input type="radio" name="formato" value="2" />
  <!-- formato: mm/dd/yyyy -->
 Da aggiungere 
<input type="text" name="incremento" value="" size="2" />
  <!-- Intervallo da aggiungere -->
 Data ricalcolata 
<input type="text" name="datafinale" value="" />
  <!-- Data di arrivo (formato: dd/mm/yyyy) -->
 
<input onclick="dateAdd()" type="button" name="calcola" value="calcola" />
  <!-- Pulsante calcolo nuova data-->
</form>

Dettagli

Chicosoft di F.Bianchi
P.Iva: 03634480168

Website: www.chicosoft.it

Mail: Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo.

Disclaimer

I codici e le soluzioni proposti su questo sito sono inseriti a mero scopo dimostrativo e la Chicosoft declina ogni responsabilità in merito al loro uso.

 

 

Questo sito utilizza i cookie per migliorare servizi ed esperienza dei lettori. Se decidi di continuare la navigazione consideriamo che accetti il loro uso.