Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it L'avatar di Galex
    Registrato dal
    Aug 2002
    Messaggi
    667

    controllo validità campo data

    controllo validità data

    vorrei che fosse impossibile inserire nel campo "data_ritardo" una data minore dela data di oggi,e ho fatto così:

    var d = new Date();
    gg=d.getDate()+ "/";if(gg.length < "3"){gg="0"+gg;}mm=(d.getMonth() + 1) + "/";
    if(mm.length < "3"){mm="0"+mm;}oggi= gg+ mm +d.getYear();
    if (doc.data_ritardo.value < oggi){alert("\n- Data posticipo minore della data odierna");}



    ma xchè questo controllo mi da che la "Data posticipo minore della data odierna" anche quando non è vero????!!!

  2. #2
    Utente di HTML.it L'avatar di willybit
    Registrato dal
    May 2001
    Messaggi
    4,367
    Ciao Galex,

    tu fai un confronto tra stringhe e non tra date... dovresti verificare che la data inserita sia valida, tipo in formato gg/mm/aaaa e se la stringa che rappresenta la data è valida la trasformi in una variabile di tipo data e la confronti con la data odierna.
    Ti faccio un esempio completo
    codice:
    <HTML>
    <HEAD>
    <script language="javascript">
    function y2k(number) { 
    	return (number < 1000) ? number + 1900 : number; 
    }
    function dataValida(txt){
    	var re = /^\d{1,2}\/\d{1,2}\/\d{4}$/
    	if(re.test(txt)){
    		var adata = txt.split('/');
    		var gg = parseInt(adata[0],10);
    		var mm = parseInt(adata[1],10);
    		var aaaa = parseInt(adata[2],10);
    		var xdata = new Date(aaaa,mm-1,gg)
    		if((y2k(xdata.getYear())==aaaa) && (xdata.getMonth()==mm-1) && (xdata.getDate()==gg))
    			return xdata
    		else return false
    	}else return false
    }
    
    function test(txt){
    	var oggi = new Date()
    	oggi = new Date(y2k(oggi.getYear()),oggi.getMonth(),oggi.getDate())
    	var xdata = dataValida(txt)
    	if(xdata){
    		if(xdata<oggi){
    			alert('Data minore della data odierna!')
    			return false
    		}
    		else{
    			alert('Data OK')
    			return true
    		}
    	}
    	else{
    		alert('Data non valida!')
    		return false
    	}
    }
    </script>
    </HEAD>
    <BODY>
    <form name="NomeForm">
    inserire una data maggiore o uguale a oggi (formato gg/mm/aaaa)
    
    <input type="text" name="data">
    <input type="button" value="test" onclick="test(this.form.data.value)">
    </form>
    </BODY>
    </HTML>
    se ti servono chiarimenti chiedi pure

  3. #3
    Utente di HTML.it L'avatar di Galex
    Registrato dal
    Aug 2002
    Messaggi
    667
    ciao willybit

    ti ringrazio della risposta,l'unica cosa è che io inserisco la data nel campo del form tramite un calendarietto (i classici calendari su pop-up in javascript), quindi non c'è bisogno di controllare il formato della data perchè è corretto sicuramente.Ho cercato di mettere il tuo script "in mezzo" al mio ma non funziona, non mi segnala mai l'errore anche quando dovrebbe

    questo è quel che ho scritto se ti va di darci un occhiata

    function y2k(number) {
    return (number < 1000) ? number + 1900 : number;
    }
    function ControllaForm(){
    var controllo=false;stringV="";stringL="";stringE="";d oc=document.info;
    var oggi = new Date()
    oggi = new Date(y2k(oggi.getYear()),oggi.getMonth(),oggi.getD ate())

    if (doc.nome.value.trim() == ""){controllo=true;stringV = stringV + "\n- Nome Autore";}
    if (doc.cognome.value.trim() == ""){controllo=true;stringV = stringV + "\n- Cognome Autore";}
    if (doc.stato_assegnare.value == ""){controllo=true;stringV = stringV + "\n- Stato da assegnare";}
    if (doc.stato_assegnare.value == "2"){
    if (doc.data_ritardo.value.trim() == ""){controllo=true;stringV = stringV + "\n- Data posticipo"}else{
    var xdata
    xdata=new Date(doc.data_ritardo.value)
    if (xdata < oggi){
    controllo=true;stringE = stringE + "\n- Data posticipo minore della data odierna"
    }

    if (controllo){alert("ERRORI RILEVATI NEL FORM:"+"\n"+string+"\n"+"\nCORREGGERLI PER POTER PROSEGUIRE");}else{;info.submit();}
    }

  4. #4
    Utente di HTML.it L'avatar di willybit
    Registrato dal
    May 2001
    Messaggi
    4,367
    ok Galex,

    ne ho fatto uno pure io di calendarietti in javascript molto comodi... ma l'utente non può inserire una data a mano? vabbe'...

    comunque la funzione che controlla la validità restituiva anche una variabile di tipo data (se la stringa è valida)
    tu sbagli qui
    codice:
    xdata=new Date(doc.data_ritardo.value)
    se non vuoi usare la funzione dataValida devi fare così
    codice:
    var adata = doc.data_ritardo.value.split('/');
    var gg = parseInt(adata[0],10);
    var mm = parseInt(adata[1],10);
    var aaaa = parseInt(adata[2],10);
    var xdata = new Date(aaaa,mm-1,gg)

  5. #5
    Utente di HTML.it L'avatar di Galex
    Registrato dal
    Aug 2002
    Messaggi
    667
    no,l'utente non può mettere la data a mano,il campo è READOLY,ho messo il calendario proprio x evitare errori nella formattazione,oltre che x la sua comodità.
    grazie x la correzione,domani provo subito e ti faccio sapere.


  6. #6
    Utente di HTML.it L'avatar di Galex
    Registrato dal
    Aug 2002
    Messaggi
    667
    ok,funziona tutto!
    ti ringrazio Willybit!

  7. #7
    Scusate una domanda...
    Sono abituato al VBscript dove esiste una funzione Isdate() che mi controlla la validità di una data anche se l'utente scrive 31/02/2004.
    Esiste un comando analogo in Jscript oppure bisogna fare sempre una serie di funzioni controllo?
    Delfino Cobalto

  8. #8
    Moderatore di JavaScript L'avatar di br1
    Registrato dal
    Jul 1999
    Messaggi
    19,998
    puoi usare la funzione poco piu' su' la ri-posto per comodita':
    codice:
    function dataValida(txt){
    	var re = /^\d{1,2}\/\d{1,2}\/\d{4}$/
    	if(re.test(txt)){
    		var adata = txt.split('/');
    		var gg = parseInt(adata[0],10);
    		var mm = parseInt(adata[1],10);
    		var aaaa = parseInt(adata[2],10);
    		var xdata = new Date(aaaa,mm-1,gg)
    		if((xdata.getFullYear()==aaaa)
    		&& (xdata.getMonth()==mm-1) 
    		&& (xdata.getDate()==gg)
    		  )  return xdata
    		else return false
    	}else return false
    }
    ciao
    Il guaio per i poveri computers e' che sono gli uomini a comandarli.

    Attenzione ai titoli delle discussioni: (ri)leggete il regolamento
    Consultate la discussione in rilievo: script / discussioni utili
    Usate la funzione di Ricerca del Forum

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.