Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    Calcolo automatico della differenza tra due date

    Ciao,
    ci sto sbattendo la testa da un pò ma non ne vengo a capo. Ho la necessità di calcolare in automatico i giorni che intercorrono tra due date.

    Ho il seguente script, ma affinchè si possa avere il calcolo è necessario cliccare sul bottone calcola.
    Come posso fare affinchè il calcolo dei giorni avvenga in automatico dopo aver compilato i campi Dal-Al?

    codice HTML:
    <form name="DiffG">
    Calcolo dei giorni che intercorrono tra due date
    <br>
    Dal<br>
    <input id="DaG" name="DaG">/ 
    <input id="DaM" name="DaM">/ 
    <input id="DaA"  name="DaA">
    al <br>
    <input id="AG" name="AG" size="20">/ 
    <input id="AM" name="AM" size="20">/ 
    <input id="AA" name="AA" size="20">
    <input type="button" value="Calcola" onClick="DiffDate();" id="button1" name="button1"></font>
    N.giorni<br>
    <input id="NG" name="NG">
    </form>
    
    <script>
    
    //fUNZIONE DI CALCOLO DIFFERENZA GIORNI FRA DUE DATE
      function DiffDate() {
        DD=parseInt(document.DiffG.DaG.value)
        MM=parseInt(document.DiffG.DaM.value)
        YY=parseInt(document.DiffG.DaA.value)
        HR=0
        MN=0
        SS=0
        with (Math) {  
          HR = HR + (MN / 60) + (SS / 3600);
          GGG = 1;
          if( YY < 1582 ) GGG = 0;
          if( YY <= 1582 && MM < 10 ) GGG = 0;
          if( YY <= 1582 && MM == 10 && DD < 5 ) GGG = 0;
          JD = -1 * floor(7 * (floor((MM + 9) / 12) + YY) / 4);
          S = 1;
          if ((MM - 9)<0) S=-1;
          A = abs(MM - 9);
    
          J1 = floor(YY + S * floor(A / 7));
          J1 = -1 * floor((floor(J1 / 100) + 1) * 3 / 4);
          JD = JD + floor(275 * MM / 9) + DD + (GGG * J1);
          JD = JD + 1721027 + 2 * GGG + 367 * YY - 0.5;
          JD = JD + (HR / 24);
        }
        DataStart=JD 
        DD=parseInt(document.DiffG.AG.value)
        MM=parseInt(document.DiffG.AM.value)
        YY=parseInt(document.DiffG.AA.value)
        with (Math) {  
          HR = HR + (MN / 60) + (SS / 3600);
          GGG = 1;
          if( YY < 1582 ) GGG = 0;
          if( YY <= 1582 && MM < 10 ) GGG = 0;
          if( YY <= 1582 && MM == 10 && DD < 5 ) GGG = 0;
          JD = -1 * floor(7 * (floor((MM + 9) / 12) + YY) / 4);
          S = 1;
          if ((MM - 9)<0) S=-1;
          A = abs(MM - 9);
          J1 = floor(YY + S * floor(A / 7));
          J1 = -1 * floor((floor(J1 / 100) + 1) * 3 / 4);
          JD = JD + floor(275 * MM / 9) + DD + (GGG * J1);
          JD = JD + 1721027 + 2 * GGG + 367 * YY - 0.5;
          JD = JD + (HR / 24);
        }
        DataEnd=JD 
        document.DiffG.NG.value=DataEnd-DataStart;
    }
    </script>

    Grazie

  2. #2
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,131
    <input id="AA" name="AA" size="20" onBlur="DiffDate();"> oppure prova con evento onchange al posto del onBlur e se vuoi togli il pulsante

    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  3. #3
    <input id="AA" name="AA" size="20" onBlur="DiffDate();">
    Grazie per la risposta, ma ho provato come mi indichi tu usando l'onBlur e in questo caso devo sempre passare sopra il bottone calcola perchè non calcola in automatico, mentre usando onChange non calcola nulla.
    Sicuramente sbaglio io, ma ti chiedo se puoi mostrarmi il mio script funzionante o dove devo settare questo evento.

    Io ho provato in questo modo: non ottengo nessun calcolo automatico
    <input id="AA" name="AA" size="20" onBlur="DiffDate();">

    oppure in questo modo: non ottengo nessun calcolo automatico
    <input type="button" value="Calcola" onChange="DiffDate();" id="button1" name="button1">
    <input type="button" value="Calcola" onBlur="DiffDate();" id="button1" name="button1">


    Non capisco dove sbaglio, puoi mostrarmi il mio script funzionante o dove devo settare questo evento?


    Grazie mille

  4. #4
    Ciao,
    ho risolto con questo script:

    <html>
    <head>
    <script type="text/javascript">
    function findDiff(){
    var bl_data_checkin= document.getElementById("bl_data_checkin").value;
    var bl_data_checkout= document.getElementById("bl_data_checkout").value;
    var date1 = new Date(bl_data_checkin);
    var date2=new Date(bl_data_checkout);

    var ONE_DAY = 1000 * 60 * 60 * 24
    var d1 = date1.getTime()
    var d2 = date2.getTime()
    var diff = Math.abs(d1 - d2)
    document.getElementById("bl_giorni_permanenza").va lue=Math.round(diff/ONE_DAY);
    }
    </script>
    </head>
    <body>
    <pre>
    Enter Date1(yyyy-mm-dd): <input type="text" name="bl_data_checkin" id="bl_data_checkin" />
    Enter Date2(yyyy-mm-dd): <input type="text" name="bl_data_checkout" id="bl_data_checkout" onBlur="findDiff();" />
    Number of bl_giorni_permanenza: <input type="text" name="bl_giorni_permanenza" id="bl_giorni_permanenza" />

    </pre>
    </body>
    </html>


    l'unico problema sono le date in formato americano.
    Mi sai indicare come formattarle in italiano?


    Grazie ancora

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