[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>