Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it L'avatar di [trodat]
    Registrato dal
    Oct 2004
    Messaggi
    2,135

    [Funzione] Data fine < Data Inizio

    Ciao, mi spiegate perchè questa funzione che controlla un form mi dice sempre che la "La data di fine non può essere uguale (o minore) alla data di inizio !" anche quando non è così?

    Ho trovato il tutto con la ricerca:

    codice:
    <script language="JavaScript" type="text/JavaScript">
    <!--
    
    function isDate(str) { // anno a 4 cifre !!!
    	spz = str.split("/"); 
    	dat = new Date(spz[2], spz[1]-1, spz[0]); 
    	if	( 
    		dat.getFullYear() == parseFloat(spz[2]) &&
    		dat.getMonth() == (parseFloat(spz[1])-1) &&
    		dat.getDate() == parseFloat(spz[0]) 
    		) {
    			return dat;
    	}
    	return false;
    }
    
    
    function convalidaForm(Qform) 
    {
    
    
    if(document.getElementById('data_inizio').value == "" ){
    alert("Inserire data inizio.");
    document.getElementById('data_inizio').focus();
    return false;
    }
    
    if(document.getElementById('data_fine').value == "" ){
    alert("Inserire data fine.");
    document.getElementById('data_fine').focus();
    return false;
    }
    
    var data_1 = isDate(document.getElementById('data_inizio').value);
    var data_2 = isDate(document.getElementById('data_fine').value);
    
    	if ((data_2)<=(data_1)) {
    		alert("La data di fine non può essere uguale (o minore) alla data di inizio !");
    		Qform.data_fine.focus();
    		return false;
    	}
    
    // Abilita l'invio del FORM
    return(true);
    }
     
    //-->
    </script>
    
    <form name="Qform" action="pag2.asp" method="post" onsubmit="return(convalidaForm(this));">
    Lo Stato dà un posto. L’impresa privata dà un lavoro. – Indro Montanelli

  2. #2
    Utente di HTML.it L'avatar di floyd
    Registrato dal
    Apr 2001
    Messaggi
    3,837
    con ie e ff funziona

  3. #3
    Utente di HTML.it L'avatar di [trodat]
    Registrato dal
    Oct 2004
    Messaggi
    2,135
    Originariamente inviato da floyd
    con ie e ff funziona
    Sono su IE e non mi funziona... cioè se data fine è superiore a data inizio mi restitusice sempre la alert...
    Lo Stato dà un posto. L’impresa privata dà un lavoro. – Indro Montanelli

  4. #4
    è un po' complesso come JS per un controllo per due date, ti invio uo che ho scritto che è molto più sintetico e che funziona

    codice:
    function testDate(io){
        var dataIn = document.filtro.dataIn.value;
        var dataOut = document.filtro.dataOut.value;
        dataInSplit = dataIn.split("-");
        dataOutSplit = dataOut.split("-");
        dIn = dataInSplit[2]+dataInSplit[1]+dataInSplit[0];
        dOut = dataOutSplit[2]+dataOutSplit[1]+dataOutSplit[0];
        if(dIn > dOut) {
            alert("La data di inizio non può essere maggiore della data di fine");
            if(io == "in") {
                document.filtro.dataIn.value = dataOut;
            } else {
                document.filtro.dataOut.value = dataIn;
            }
        }
    }
    le date letta sono nel formato 03-10-2006 e sono controlate da un js che permette di selezionare una data da calendario

  5. #5
    Utente di HTML.it L'avatar di [trodat]
    Registrato dal
    Oct 2004
    Messaggi
    2,135
    Originariamente inviato da floyd
    con ie e ff funziona
    Non so come fai a dire questo, prova lo script qui:

    http://www.albarello.it/test/datario.htm
    Lo Stato dà un posto. L’impresa privata dà un lavoro. – Indro Montanelli

  6. #6
    Utente di HTML.it L'avatar di Luis33
    Registrato dal
    May 2003
    Messaggi
    975
    In effetti lo script non funziona (di seguito spiego anche perchè), chissà quali infallibili browsers utilizza l'amico floyd

    Nel tuo script ci sono diversi errori e imprecisioni, se utilizzi il formato aaaa/mm/gg, allora nella funzione isDate() devi cambiare gli indici nell'array spz, in questo caso infatti, l'anno sarà contenuto nell'indice 0 anziché nel 2, per il giorno devi fare esattamente il contrario (2 anziché 0).

    Inoltre, non fai nessun controllo sul ritorno della funzione isDate()... che potrebbe essere false (errore)... e, infine, utilizzi diverse volte il method document.getElementById() senza che ce ne sia bisogno, infatti, hai già la variabile Qform che contien l'oggetto FORM... ecco lo script corretto:

    codice:
    function isDate(str)
    { // anno a 4 cifre !!!
      spz = str.split("/");
      if (spz.length != 3) return(false);
     
      dat = new Date(spz[0], spz[1] - 1, spz[2]);
     
      if (dat.getFullYear() == parseFloat(spz[0]) &&
          dat.getMonth() == (parseFloat(spz[1]) - 1) &&
          dat.getDate() == parseFloat(spz[2])) return(dat);
     
      return(false);
    }
     
    function convalidaForm(Qform)
    {
      if ((data_1 = isDate(Qform.data_inizio.value)) == false)
        {
          alert("Inserire data inizio correttamente.");
          Qform.data_inizio.focus();
          return(false);
        }
     
      if ((data_2 = isDate(Qform.data_fine.value)) == false)
        {
          alert("Inserire data fine correttamente.");
          Qform.data_fine.focus();
          return(false);
        }
     
      if (data_2.getTime() <= data_1.getTime())
        {
          alert("La data di fine non può essere uguale (o minore) alla data di inizio !");
          Qform.data_fine.focus();
          return(false);
        }
     
      // Abilita l'invio del FORM
      return(true);
    }
    Ciao.
    ... Sono graditi codes, esempi pratici, suggerimenti, consigli e critiche...
    "Ai posteri l'ardua sentenza..."
    Tante grazie
    Saluti
    Luis 33

  7. #7
    Utente di HTML.it L'avatar di floyd
    Registrato dal
    Apr 2001
    Messaggi
    3,837
    Originariamente inviato da Luis33
    chissà quali infallibili browsers utilizza l'amico floyd
    ie 6 e ff 1.5

  8. #8
    Originariamente inviato da Luis33
    ... utilizzi diverse volte il method document.getElementById() senza che ce ne sia bisogno, infatti, hai già la variabile Qform che contien l'oggetto FORM...
    document.form.oggetto funziona solo con explorer
    prude il dito, lui sdraiato
    ha giocato a guardie e ladri col ladro sbagliato

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.