Il problema sono i campi data time box che non permettono di inserire il richiamo alla funzione javascripts
Ho provato un nuovo form con due campi normali in cui inserisco le date e tutto è OK.
Questo il codice dei campi
<div class="ccms_form_element cfdiv_text" id="data_1_container_div"><label>Data 1</label><input maxlength="150" size="30" class="" title="" label_over="0" hide_label="0" type="text" value="" name="data_1" />
<div class="clear"></div><div id="error-message-data_1"></div></div><div class="ccms_form_element cfdiv_text" id="data_2_container_div"><label>Data 2</label><input maxlength="150" size="30" class="" title="" label_over="0" hide_label="0" type="text" value="" name="data_2" onchange="giorni_differenza(this.form);")/>
<div class="clear"></div><div id="error-message-data_2"></div></div><div class="ccms_form_element cfdiv_text" id="differenza_date_container_div"><label for="diff">Differenza date</label><input id="diff" maxlength="150" size="30" class="" title="" label_over="0" hide_label="0" type="text" value="" name="diff" />
<div class="clear"></div><div id="error-message-diff"></div></div><div class="ccms_form_element cfdiv_submit" id="input_submit_5_container_div"><input name="input_submit_5" class="" value="Submit" type="submit" />
<div class="clear"></div><div id="error-message-input_submit_5"></div></div>
questo il codice javascript
function controllo_data(stringa){
var espressione = /^[0-9]{2}\/[0-9]{2}\/[0-9]{4}$/;
if (!espressione.test(stringa)) {
return false;
}else{
anno = parseInt(stringa.substr(6,4),10);
mese = parseInt(stringa.substr(3, 2),10);
giorno = parseInt(stringa.substr(0, 2),10);
var data=new Date(anno, mese-1, giorno);
if(data.getFullYear()==anno && data.getMonth()+1==mese && data.getDate()==giorno){
return true;
}else{
return false;
}
}
}
function confronta_data(data1, data2){
// controllo validità formato data
if(controllo_data(data1) && controllo_data(data2)){
//trasformo le date nel formato aaaammgg (es. 20081103)
data1str = data1.substr(6,4)+data1.substr(3, 2)+data1.substr(0, 2);
data2str = data2.substr(6,4)+data2.substr(3, 2)+data2.substr(0, 2);
//controllo se la seconda data è successiva alla prima
//document.write(data1str);
//document.write(data2str-data1str);
if ((data2str-data1str)<0) {
alert("La data iniziale deve essere precedente quella finale");
}else{
alert("ok");
}
}else{
alert("Il formato data deve essere gg/mm/aaaa");
}
}
function giorni_differenza(form){
//document.write("sono qui");
var data1=form.elements['data_1'].value;
var data2=form.elements['data_2'].value;
//document.write(data1);
if(!controllo_data(data1) || !controllo_data(data2)){
alert('Inserire le date nel formato gg/mm/aaaa');
return -1;
}
/* if(!confronta_data(data1,data2)){
alert('La data di inizio deve essere precedente quella di fine');
return -1;
}*/
anno1 = parseInt(data1.substr(6,4),10);
mese1 = parseInt(data1.substr(3, 2),10);
giorno1 = parseInt(data1.substr(0,2),10);
anno2 = parseInt(data2.substr(6,4),10);
mese2 = parseInt(data2.substr(3, 2),10);
giorno2 = parseInt(data2.substr(0,2),10);
var dataok1=new Date(anno1, mese1-1, giorno1);
var dataok2=new Date(anno2, mese2-1, giorno2);
differenza = dataok2-dataok1;
giorni_differenza = new String(differenza/86400000);
form.elements['diff'].value=giorni_differenza;
alert(giorni_differenza+' giorni di differenza');
return giorni_differenza;
}
L'alternativa per usare Data time box potrebbe essere inserire il richiamo al javascripts nel campo differenza data con onclick="giorni_differenza(this.form);")