Visualizzazione dei risultati da 1 a 6 su 6

Discussione: Controllo campi data

  1. #1
    Utente di HTML.it L'avatar di nadia79
    Registrato dal
    Aug 2005
    Messaggi
    187

    Controllo campi data

    Ciao a tutti,
    ho due campi dove inserisco la data, con questo codice controllo che l'utente inserisca correttamente la data


    codice:
    <script language="JavaScript" type="text/javascript">
    <!--
    function controlla()
       {
       obj=document.inserisci.inizio.value.replace(/[^\d]/g,"0");;
       gg=obj.substr(0,2)
       mm=obj.substr(3,2);
       aa=obj.substr(6,4);
       
       strdata=gg+"/"+mm+"/"+aa;
       
       inizio = new Date(aa,mm-1,gg);
       daa=inizio.getFullYear().toString();
       dmm=(inizio.getMonth()+1).toString();
       dmm=dmm.length==1?"0"+dmm:dmm
       dgg=inizio.getDate().toString();
       dgg=dgg.length==1?"0"+dgg:dgg
       dddata=dgg+"/"+dmm+"/"+daa
       if (dddata!=strdata)
          {
          alert("Verificare la data inserita!");
          document.inserisci.inizio.value=dddata; // Nel campo viene scritta la data generata
    	  document.inserisci.inizio.value=""; // Il campo viene cancellato e...
    //document.inserisci.data.focus(); //...viene ridato il focus per il reinserimento
          }
       }
    //-->
    </script>
    <script language="JavaScript" type="text/javascript">
    <!--
    function controlla1()
       {
       obj=document.inserisci.fine.value.replace(/[^\d]/g,"0");;
       gg=obj.substr(0,2)
       mm=obj.substr(3,2);
       aa=obj.substr(6,4);
       
       strdata=gg+"/"+mm+"/"+aa;
       
       fine = new Date(aa,mm-1,gg);
       daa=fine.getFullYear().toString();
       dmm=(fine.getMonth()+1).toString();
       dmm=dmm.length==1?"0"+dmm:dmm
       dgg=fine.getDate().toString();
       dgg=dgg.length==1?"0"+dgg:dgg
       dddata=dgg+"/"+dmm+"/"+daa
       if (dddata!=strdata)
          {
          alert("Verificare la data inserita!");
          document.inserisci.fine.value=dddata; // Nel campo viene scritta la data generata
    document.inserisci.fine.value=""; // Il campo viene cancellato e...
    //document.inserisci.data.focus(); //...viene ridato il focus per il reinserimento
          }
       }
    //-->
    </script>
    ora però dovrei fare un controllo e mandare un messaggio se la data inserita nel campo fine è maggiore del campo fine come posso fare senza distruggere queste due funzioni che sono molto utili?

    Queste funzioni non le richiamo tramite onSubmit ma nei campi inizio e fine così:

    codice:
     onChange="controlla()" onKeyUp="if (this.value.length==10){this.blur()}"
    grazie

  2. #2
    Utente di HTML.it L'avatar di nadia79
    Registrato dal
    Aug 2005
    Messaggi
    187
    Pensavo di adattare questa funzione ma come faccio a far leggere le due date? Così non funziona

    codice:
    if (document.inserisci.fine.value > document.inserisci.inizio.value){
    errorMsg += "\n\tData errata\t - La data inserita non è corretta!";
    }

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Devi fare il confronto fra le date gia` convertite in tipo Date:

    inizio = new Date(aai,mmi-1,ggi);
    fine = new Date(aaf,mmf-1,ggf);
    if(fine > inizio) {
    errorMsg += "\n\tData errata\t - La data inserita non è corretta!";
    }

    PS. non ho controllato tutto il codice, e occorre che il cfr sia fatto all'interno della stessa funzione, quindi il tutto va un po' rivisto.
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  4. #4
    Utente di HTML.it L'avatar di nadia79
    Registrato dal
    Aug 2005
    Messaggi
    187
    Allora i posto il tutto

    codice:
    <script language="JavaScript" type="text/javascript">
    <!--
    function controlla()
       {
       obj=document.inserisci.inizio.value.replace(/[^\d]/g,"0");;
       gg=obj.substr(0,2)
       mm=obj.substr(3,2);
       aa=obj.substr(6,4);
       
       strdata=gg+"/"+mm+"/"+aa;
       
       inizio = new Date(aa,mm-1,gg);
       daa=inizio.getFullYear().toString();
       dmm=(inizio.getMonth()+1).toString();
       dmm=dmm.length==1?"0"+dmm:dmm
       dgg=inizio.getDate().toString();
       dgg=dgg.length==1?"0"+dgg:dgg
       dddata=dgg+"/"+dmm+"/"+daa
       
       obj=document.inserisci.fine.value.replace(/[^\d]/g,"0");;
       gg=obj.substr(0,2)
       mm=obj.substr(3,2);
       aa=obj.substr(6,4);
       
       strdata1=gg+"/"+mm+"/"+aa;
       
       fine = new Date(aa,mm-1,gg);
       daa=fine.getFullYear().toString();
       dmm=(fine.getMonth()+1).toString();
       dmm=dmm.length==1?"0"+dmm:dmm
       dgg=fine.getDate().toString();
       dgg=dgg.length==1?"0"+dgg:dgg
       dddata1=dgg+"/"+dmm+"/"+daa
       
       if (dddata!=strdata)
          {
          alert("Verificare la data inserita!");
          document.inserisci.inizio.value=dddata; // Nel campo viene scritta la data generata
    	  document.inserisci.inizio.value=""; // Il campo viene cancellato e...
    //document.inserisci.data.focus(); //...viene ridato il focus per il reinserimento
          }
       }
    //-->
    </script>
    <script language="JavaScript" type="text/javascript">
    <!--
    function controlla1()
       {
       obj=document.inserisci.fine.value.replace(/[^\d]/g,"0");;
       gg=obj.substr(0,2)
       mm=obj.substr(3,2);
       aa=obj.substr(6,4);
       
       strdata=gg+"/"+mm+"/"+aa;
       
       fine = new Date(aa,mm-1,gg);
       daa=fine.getFullYear().toString();
       dmm=(fine.getMonth()+1).toString();
       dmm=dmm.length==1?"0"+dmm:dmm
       dgg=fine.getDate().toString();
       dgg=dgg.length==1?"0"+dgg:dgg
       dddata=dgg+"/"+dmm+"/"+daa
       if (dddata!=strdata)
          {
          alert("Verificare la data inserita!");
          document.inserisci.fine.value=dddata; // Nel campo viene scritta la data generata
    document.inserisci.fine.value=""; // Il campo viene cancellato e...
    //document.inserisci.data.focus(); //...viene ridato il focus per il reinserimento
          }
       }
    //-->
    </script>
    Nei campi poi la richiamo in questo modo (nell'onSubmit ho una funzione per il controllo di altri campi):

    codice:
    <tr> 
    <td>Data inizio:</td>
    <td><input name="inizio" type="text" id="inizio" onChange="controlla()" onKeyUp="if (this.value.length==10){this.blur()}" value="<% =Date() %>" maxlength="30" /> 
    </td>
    </tr>
    <tr> 
    <td>Data fine:</td>
    <td><input name="fine" type="text" id="fine" onChange="controlla1()" onKeyUp="if (this.value.length==10){this.blur()}" value="" maxlength="30" />
    </td>
    </tr>
    In questo modo posso solo controllare il formato della data ma non riesco ad integrarci dentro il tuo codice come posso unire il tutto in una sola funzione? Così in modo da metterci anche il confronto tra date... :master:

  5. #5
    Utente di HTML.it L'avatar di nadia79
    Registrato dal
    Aug 2005
    Messaggi
    187
    Ho modificato lo script in questo modo:

    codice:
    <script language="JavaScript" type="text/javascript">
    <!--
    function controlla()
       {
       obj=document.inserisci.inizio.value.replace(/[^\d]/g,"0");;
       gg=obj.substr(0,2)
       mm=obj.substr(3,2);
       aa=obj.substr(6,4);
       
       strdata_inizio=gg+"/"+mm+"/"+aa;
       
       inizio = new Date(aa,mm-1,gg);
       daa=inizio.getFullYear().toString();
       dmm=(inizio.getMonth()+1).toString();
       dmm=dmm.length==1?"0"+dmm:dmm
       dgg=inizio.getDate().toString();
       dgg=dgg.length==1?"0"+dgg:dgg
       dddata_inizio=dgg+"/"+dmm+"/"+daa
       if (dddata_inizio!=strdata_inizio)
          {
          alert("Verificare la data inserita!");
          document.inserisci.inizio.value=dddata; // Nel campo viene scritta la data generata
    	  document.inserisci.inizio.value=""; // Il campo viene cancellato e...
    //document.inserisci.data.focus(); //...viene ridato il focus per il reinserimento
          }
       
       
       obj=document.inserisci.fine.value.replace(/[^\d]/g,"0");;
       gg=obj.substr(0,2)
       mm=obj.substr(3,2);
       aa=obj.substr(6,4);
       
       strdata_fine=gg+"/"+mm+"/"+aa;
       
       fine = new Date(aa,mm-1,gg);
       daa=fine.getFullYear().toString();
       dmm=(fine.getMonth()+1).toString();
       dmm=dmm.length==1?"0"+dmm:dmm
       dgg=fine.getDate().toString();
       dgg=dgg.length==1?"0"+dgg:dgg
       dddata_fine=dgg+"/"+dmm+"/"+daa
       if (dddata_fine!=strdata_fine)
          {
          alert("Verificare la data inserita!");
          document.inserisci.fine.value=dddata; // Nel campo viene scritta la data generata
    document.inserisci.fine.value=""; // Il campo viene cancellato e...
    //document.inserisci.data.focus(); //...viene ridato il focus per il reinserimento
       }
    	if(strdata_fine > strdata_inizio) { 
    	alert("La data di fine è maggiore di quella iniziale!");
    	} 
       
       }
    //-->
    </script>
    come vedete ho unito le funzioni controlla e controlla1 ed inoltre ho aggiunto alla fine il confronto tra le date, risultato?
    Non succede nulla... neanche il controllo della data... gentilmente potete darmi qualche suggerimento per capire dove sto sbagliando?


  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Qualche passo avcanti lo hai fatto, ma ancora ci sono errori.

    Anzitutto ti mancano dei return false; in caso di errore (non credo vuoi proseguire).

    Poi non capisco la sostituzione dei caratteri non numerici con 0: puo` funzionare con una data del tipo: 3/4/2005, ma non funziona se e` 24/10/2005.

    per spezzare la data, ti consiglio lo split:
    codice:
      var d_div = document.inserisci.inizio.value.split(/[\/\.\-]/);
      var gg = parseInt(d_div[0],10);
      var mm = parseInt(d_div[1],10);
      var aa = parseInt(d_div[2],10);
    
      strdata_inizio = ""+gg+"/"+mm+"/"+aa;
      alert("data inizio: "+strdata_inizio);
    Con il parseInt trasformi la stringa in numero.

    Ho aggiunto un alert, che ti permette di valutare la conversione della data (quando funziona poi lo toglierai): se e` sbagliata, lo vedi subito (e capisci che il resto potrebbe non avere senso).
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

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 © 2026 vBulletin Solutions, Inc. All rights reserved.