Errore funzione

Morph3us

Nuovo Utente
22 Feb 2013
3
0
0
Salve ragazzi,
Ho un problema per me un po' strano.
Vi spiego subito.

Ho una funzione js che mi calcola la differenza di giorni fra 2 date.

Codice:
<!-- Calcolare differenza in giorni tra due date -->
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),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){
	data1str = data1.substr(6)+data1.substr(3, 2)+data1.substr(0, 2);
	data2str = data2.substr(6)+data2.substr(3, 2)+data2.substr(0, 2);
	if (data2str-data1str<0) {
		return false;
	}else{
		return true;
	}
}

function giorni_differenza(data1,data2){
	
	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),10);
	mese1 = parseInt(data1.substr(3, 2),10);
	giorno1 = parseInt(data1.substr(0, 2),10);
     
	anno2 = parseInt(data2.substr(6),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);
	
	document.form1.ggAnt.value=giorni_differenza
	
	/*alert(giorni_differenza+' giorni di differenza');
	return giorni_differenza;*/
}

la funzione la richiamo tramite l'evento onclick: <img src="images/refresh_small.png" style="cursor:pointer" onClick="giorni_differenza(<%=date()%>,document.form1.dataConf.value);">

La funzione stranamente funziona SOLO 1 volta!
Anche non cambiando il valore del campo dataConf, ho anche provato a richiamare la funzione con due date fisse
giorni_differenza('01/01/2013','20/01/2013');

Firebug mi segnala "TypeError: giorni_differenza is not a function" sempre e solo al secondo click!

Che caspita può essere?
 
Ciao, metti var davanti a tutte le variabili
HTML:
<script>
    <!-- Calcolare differenza in giorni tra due date -->
    function controllo_data(stringa){
        var espressione = /^[0-9]{2}\/[0-9]{2}\/[0-9]{4}$/;
        if (!espressione.test(stringa))
        {
            return false;
        }else{
            var anno = parseInt(stringa.substr(6),10);
            var mese = parseInt(stringa.substr(3, 2),10);
            var 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){
        var data1str = data1.substr(6)+data1.substr(3, 2)+data1.substr(0, 2);
        var data2str = data2.substr(6)+data2.substr(3, 2)+data2.substr(0, 2);
        if (data2str-data1str<0) {
            return false;
        }else{
            return true;
        }
    }

    function giorni_differenza(data1,data2){
                
        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;
        }
                   
        var anno1 = parseInt(data1.substr(6),10);
        var mese1 = parseInt(data1.substr(3, 2),10);
        var giorno1 = parseInt(data1.substr(0, 2),10);
     
        var anno2 = parseInt(data2.substr(6),10);
        var mese2 = parseInt(data2.substr(3, 2),10);
        var giorno2 = parseInt(data2.substr(0, 2),10);

        var dataok1=new Date(anno1, mese1-1, giorno1);
        var dataok2=new Date(anno2, mese2-1, giorno2);
	
        var differenza = dataok2-dataok1;    
        var giorni_differenza = new String(differenza/86400000);
	
        // document.form1.ggAnt.value=giorni_differenza
        alert(giorni_differenza);
       
       
    }
            
</script>

<input type="button" value="clicca" onclick="giorni_differenza('01/01/2013','21/01/2013')"/>
 
:mavieni: FUNZIONAAAAAAAHHH alabar.gif

Grazie mille!!!!
 

Discussioni simili