Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2001
    Messaggi
    312

    consiglio controllo sulla data!!

    ciao a tutti,

    ho una funzione che utilizzo per il controllo della data, funziona abbastanza bene.

    il formato della data accettato è gg/mm/aaaa

    vorrei però che accettasse per il giorno solo 2 caratteri(adesso ne accetta anche 1)
    che accettasse per il mese 2 caratteri(adesso ne accetta anche 1)
    vorrei però che accettasse per l'anno 4 caratteri(adesso ne accetta anche 2)

    Non essendo un esperto di javascript non saprei dove andare a modificare. queste sono le 3 funzioni che utilizzo al momento

    function y2k(number) { //trasforma 02 in 2002 o 75 in 1975
    return (number < 1000) ? number + 1900 : number;
    }

    function verificaData(gg,mm,yyyy){ //verifica la validità della data
    var today = new Date();
    yyyy = ((!yyyy) ? y2k(today.getYear()):y2k(yyyy));
    mm = ((!mm) ? today.getMonth():mm-1);
    if (!gg) return false
    var test = new Date(yyyy,mm,gg);
    if ( (y2k(test.getYear()) == yyyy) && (mm == test.getMonth()) && (gg == test.getDate()) ){
    return true;
    }
    else{
    return false;
    }
    }

    function verData(){ //verifica la data presa dai campi del form

    f=document.sezione1;

    gg=f.giorno.value
    mm=f.mese.value
    aa=f.anno.value
    if(!verificaData(gg,mm,aa)){
    alert('DataNon valida!\n')
    return false
    }else return true
    }

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

    quello script mi ricorda qualcosa
    codice:
    function dataValida(txt){
    	var re = /^\d{2}\/\d{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
    }
    
    function verData(){ //verifica la data presa dai campi del form 
    	f=document.sezione1
    	var gg=f.giorno.value
    	var mm=f.mese.value
    	var aaaa=f.anno.value
    	if(!dataValida(gg+'/'+mm+'/'+aaaa)){
    		alert('DataNon valida!')
    		return false
    	}else return true
    }

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2001
    Messaggi
    312
    grazie willy sempre gentile!!!!!!!

    ho un piccolo problemino però, mi stampa sempre "Data non valida"


    consiferando il fatto che il form chiama la funzione controllo :

    <input type="button" onclick="return controllo()" value="Memorizza la sezione 1" >

    e queste sono le funzioni che utilizzo


    function dataValida(txt){
    var re = /^\d{2}\/\d{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
    }




    function verData(){ //verifica la data presa dai campi del form

    f=document.sezione1
    var gg=f.giorno.value
    var mm=f.mese.value
    var aaaa=f.anno.value
    if(!dataValida(gg+'/'+mm+'/'+aaaa)){
    alert('DataNon valida!')
    return false
    }else return true
    }


    function controllo(){

    msg='';
    f= document.sezione1;

    gg=f.giorno.value
    mm=f.mese.value
    aa=f.anno.value
    if(!dataValida(gg,mm,aa))//controllo data
    msg=msg+'DataNon valida!\n'
    //tutti i controlli che vuoi
    if(msg!=''){
    alert(msg)
    return false
    }

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

    se usi la funzione controllo() puoi cancellare la funzione verData()... però la funzione controllo va così
    codice:
    function controllo(){
      msg='';
      f= document.sezione1;
      gg=f.giorno.value
      mm=f.mese.value
      aa=f.anno.value
      if(!dataValida(gg+'/'+mm+'/'+aa))//controllo data
        msg=msg+'Data Non valida!\n'
      //tutti i controlli che vuoi
      if(msg!=''){
        alert(msg)
        return false
      }
    }
    e poi va richiamata all'onsubmit del form e non all'onclick del button (lo puoi fare per test)

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2001
    Messaggi
    312
    ok cosi è a posto!!!!!!

    ho bisogno ancora di un tuo aiuto,

    avendo il codice hml all'interno di un ciclo while(asp)

    ho utilizzato una variabile contatore che in pratica genera questo codice hrml

    <input type="text" name="giorno1" size="2" value="23" maxlength="2">/
    <input type="text" name="mese1" size="2" value="04" maxlength="2">/
    <input type="text" name="anno1" size="4" value="1979" maxlength="2">


    ..................


    <input type="text" name="giorno2" size="2" value="23" maxlength="2">/
    <input type="text" name="mese2" size="2" value="04" maxlength="2">/
    <input type="text" name="anno2" size="4" value="1979" maxlength="2">


    e cosi via tanti quanti sono i cicli del while

    ora, per fare il controllo su tutte le date presenti e non solo sulla prima ho provato a modificare la tua funzione JS in questo modo:


    function controllo(record) {


    var indice;
    //var record;
    indice = 1;
    var valore;

    while (record > indice) {

    msg='';
    f = document.form_dati;
    gg=f.giorno+indice.value QUI HO CONCATENATO LA VARIABILE
    mm=f.mese+indice.value QUI HO CONCATENATO LA VARIABILE
    aa=f.anno+indice.value QUI HO CONCATENATO LA VARIABILE
    if(!dataValida(gg+'/'+mm+'/'+aa))//controllo data
    msg=msg+'Data Non valida!\n'
    //tutti i controlli che vuoi
    if(msg!=''){
    alert(msg)
    return false
    }

    //valore = document.form_dati.elements["id_sezione2" + indice].value

    document.form_dati.action='modifica_sezione7.asp?r ecord='+record
    indice = indice + 1;
    }
    return true;
    }


    putroppo pero non funziona in questo modo, visto che se mi faccio stampare per esempio "gg" mi stampa "NaN"


    come posso risolvere????


    ciao e grazie

  6. #6
    Utente di HTML.it L'avatar di willybit
    Registrato dal
    May 2001
    Messaggi
    4,367
    non mi è molto chiaro il tuo script :master:
    visto che le varie date le fai in asp puoi passare al js il numero
    codice:
    function controllo(){
      var numeroDate = <%=NumeroDate%>;
      var msg='';
      var f=document.sezione1.elements;
      for(var i=1;i<=numeroDate;i++){
        gg=f['giorno'+i].value
        mm=f['mese'+i].value
        aa=f['anno'+i].value
        if(!dataValida(gg+'/'+mm+'/'+aa))//controllo data
          msg=msg+'la data n°'+i+' NON è valida!\n'
      }
      //tutti i controlli che vuoi
      if(msg!=''){
        alert(msg)
        return false
      }
    }

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.