Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    39

    intervallo tra 2 date - 29 febbraio da errore

    ciao! ho un problema di calcolo con un periodo ke comprende il 29 febbraio..
    premetto che javascript lo uso marginalmente e sono di poco al di sopra dell'essere un utonto in questo campo comunque ho cercato qualche thread ma non ho trovato niente che mi dava una soluzione al mio problema.

    ho un form al cui interno digito un periodo dal - al e di cui calcolo l'intervallo che confronto
    con il dato inserito nel successivo campo giorni, se l'intervallo comprende la data del 29 febbraio il sistema mi calcola due giorni in più. WHY??

    questa è la funzione di calcolo dell'intervallo
    Codice PHP:
    function InvioM(){
    var 
    giorni document.modulo.giorni.value;
    var 
    dal document.modulo.dal.value;
    var 
    al document.modulo.al.value;
    val1 parseInt(document.modulo.zero.value);
    val2 parseInt(document.modulo.cento.value);
    val3 parseInt(document.modulo.cinquanta.value);
    val4 parseInt(document.modulo.rhcento.value);
    val5 parseInt(document.modulo.rhcinquanta.value);
    val6 parseInt(document.modulo.rcento.value);
    val7 parseInt(document.modulo.rcinquanta.value);
    totale val1+val2+val3+val4+val5+val6+val7;

    var 
    temp1 dal.split(/[\-\.\/]/);
    var 
    temp2 al.split(/[\-\.\/]/);
    /*var dataI = new Date(temp1[2], parseInt(temp1[1],10), temp1[0]);
    var dataF = new Date(temp2[2], parseInt(temp2[1],10), temp2[0]);
    calcolo = Math.round((dataF - dataI) / (1000 * 3600 * 24) + 1) ; */
    if ((giorni == "")){
            
    alert("il campo giorni deve essere diverso da 0 e contenere solo numeri ");
            
    document.modulo.giorni.focus();
            return 
    false;
       }
        else if (
    giorni != Math.floor(calcolo)){
            
    alert("Attenzione il valore non corrisponde alla differenza tra tot giorni inseriti "+giorni+" e calcolo della diff delle date  "+calcolo+"");
            return 
    false;
       }
        else if ((
    totale ==0) || (giorni != totale)){
               
    alert("la somma dei campi giorni è sbagliata  "+giorni+"-->"+totale+"");
            return 
    false;
       }
       else {
            
    document.modulo.action "index.php";
            
    document.modulo.submit();
       }

    mentre qui ho il form
    Codice PHP:
    <form method="post" name="modulo"> 
      <input name="cid" type="hidden" value="<?php echo $Cid?>" />
      <input name="area" type="hidden" value="<?php echo $AREA?>" />
      <table width="100%" border="2" cellspacing="1" cellpadding="1">
        <tr>
          <th>Dal</th>
          <td><input name="dal" type="text" onChange="VdataA()" value="00-00-0000" size="8" class="minus"/></td>
          <th>Al</th>
          <td><input type="text" name="al" onChange="VdataB()" value="00-00-0000" size="8" class="minus" /></td>
    <tr>
          <th>giorni</th>
          <td><input type="text" name="giorni" size="3" class="minus" /></td>
          <th>Non Retrib. </th>
          <td><input type="text" name="zero" value="0" size="3" class="minus" /></td>
    </tr>
        <tr>
          <th>100%</th>
          <td><input type="text" name="cento" value="0"  size="3" class="minus" /></td>
          <th>50%</th>
          <td><input type="text" name="cinquanta" value="0" size="3" class="minus" /></td>
    </tr>
        <tr>
          <th>RH 100%</th>
          <td><input type="text" name="rhcento" value="0"  size="3"  class="minus" /></td>
          <th>RH 50%</th>
          <td><input type="text" name="rhcinquanta" value="0" size="3" class="minus" /></td>
      </tr>
        <tr>
          <th>R 100%</th>
          <td><input type="text" name="rcento" value="0"  size="3"  class="minus" /></td>
          <th>R 50%</th>
          <td><input type="text" name="rcinquanta" value="0" size="3"  class="minus" /></td>
    </tr>
    <tr>
    <td colspan="4" align="center">
    <input type="button" value="INVIO" onclick="InvioM()"/></td> 
    </tr>
      </table>
    </form>
    grazie a tutti
    il mio vano motore è troppo vano e poco motore (elio e le storie tese)
    Infinite cose da fare e così poco tempo (Joker a Batman)

  2. #2
    Ho notato un errore nalla parte commentata: questa:
    Codice PHP:
    /*var dataI = new Date(temp1[2], parseInt(temp1[1],10), temp1[0]);
    var dataF = new Date(temp2[2], parseInt(temp2[1],10), temp2[0]);
    calcolo = Math.round((dataF - dataI) / (1000 * 3600 * 24) + 1) ; */ 
    La new Date(anno, mese, giorno) accetta come parametri:
    Anno: 4 cifre
    Mese: da 0 a 11
    Giorno: il giorno

    QUINDI
    tu stai calcolando date sbagliate!
    devi sempre togliere 1 dal mese se vuoi usare il costruttore new Date(anno,mese,giorno)!!

    Io correggerei così:
    codice:
    /*var dataI = new Date(temp1[2], parseInt(temp1[1],10) - 1, temp1[0]);
    var dataF = new Date(temp2[2], parseInt(temp2[1],10) - 1, temp2[0]);
    calcolo = Math.round((dataF - dataI) / (1000 * 3600 * 24) + 1) ; */
    HTH
    Zappa
    [PC:Presario 2515EU][Cpu:P4@2.3GHz][Ram: 512M][HDU:80G@5400 RPM]
    [Wireless:LinkSys][OS: Ubuntu 9.04 - Jaunty Jackalope]

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    39
    ciao e grazie come prima cosa.

    ora funziona perfettamente, solo un cortesia per due domande
    mi puoi spiegare il xke del - 1
    e possibile affogare un'altra funzione che mi converte le date inserite da GGMMAA a GG-MM-AAAA

    ciao e grazie per l'interessamento e l'aiuto
    il mio vano motore è troppo vano e poco motore (elio e le storie tese)
    Infinite cose da fare e così poco tempo (Joker a Batman)

  4. #4
    Originariamente inviato da Jos
    ciao e grazie come prima cosa.

    ora funziona perfettamente, solo un cortesia per due domande
    mi puoi spiegare il xke del - 1
    Perchè chi ha creato il costruttore Date(y,m,d) lo ha creato così ... che dire?
    Originariamente inviato da Jos
    e possibile affogare un'altra funzione che mi converte le date inserite da GGMMAA a GG-MM-AAAA
    ciao e grazie per l'interessamento e l'aiuto
    certo, .. cerca un po' in giro che adesso non posso ... it's "go Home" time!

    ciao!
    Zappa
    [PC:Presario 2515EU][Cpu:P4@2.3GHz][Ram: 512M][HDU:80G@5400 RPM]
    [Wireless:LinkSys][OS: Ubuntu 9.04 - Jaunty Jackalope]

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.