Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2003
    Messaggi
    1,093

    differenza tra date in giorni

    Ciao,

    ho due date es
    31/12/2004
    10/01/32005

    come faccio a ricavarmi i giorni di differenza tra le due date?

    grazie

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    var prima = new Date(2004, 11, 31);
    var seconda = new Date(2005, 0, 10);
    diff = (seconda - prima) / (1000 * 3600 * 24);

    Forse occorre anche arrotondare, ma prima prova (in teoria non serve, ma in pratica non so se fa i conti con interi o float).



    per scrivere i dati nelle variabili prima e seconda (supponendo che siano dei campi di input con formattazione 31/1/2004) puoi usare:

    var l_prima = document.NOMEFORM.NOMECAMPO.value;
    var vett = l_prima.split(/[\-\.\/]/);
    var prima = new Date(vett[2], parseInt(vett[1],10)-1, vett[0]);
    ... similmente per seconda ...
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2003
    Messaggi
    1,093
    ok lo provo grazie

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2003
    Messaggi
    1,093
    funziona perfettamente ma il problema è che io ho la data in questo formato:

    una: 21/10/2004

    come la setto?
    ps
    Mich, sai come si fa in perl che forse mi viene piu comoda, la diff tra due date? - ho aperto anche la...

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Lo script che ti ho dato dovrebbe funzionare per tutti i tipi di formattazione (con separatore a scelta tra - / . ) purche` rispettino l'ordine gg/mm/aaaa.
    Va bene anche g/m/aaaa o gg/m/aaaa o g/mm/aaaa

    Si puo` anche fare in modo che funzioni con l'anno a 2 cifre, ma questo comporta qualche riga in piu` di programmazione.

    Per il Perl, la cosa e` simile: occorre trasformare in formato interno del Perl e poi fare la differenza (tieni presente che in Perl il dato e` in secondi, se non erro, non in millisec).
    Vedi comunque la pagina del manuale di time o localtime.
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  6. #6
    Utente di HTML.it
    Registrato dal
    Jan 2003
    Messaggi
    1,093
    ok grazie

  7. #7
    questo script dovrebbe fare al caso mio. Solo che ho un problemino d'adattamento.

    Ho un form di prenotazione, con 2 campi (data_arrivo e data_partenza); sotto a questi 2 campi ne ho un terzo con il numero delle notti e vorrei che numero_notti si riempisse automaticamente SOLO quando i 2 campi data sono a loro volta pieni. Come la posso fare una cosa del genere?





    Grazie mille!
    Talvolta anche una persona apparentemente inutile si rivela un abile samurai dalla forza di mille uomini, dimostrando di poter rinunciare alla vita e che il suo cuore si è completamente identificato con quello del suo padrone

  8. #8
    Frontend samurai L'avatar di fcaldera
    Registrato dal
    Feb 2003
    Messaggi
    12,924
    scrivi il dato nel terzo campo:
    - all'onchange del primo campo se non è vuoto e il secondo non è vuoto
    - all'onchange del secondo campo se non è vuoto e il primo non è vuoto

    all'onchange richiami una funziona che fa questi due controlli
    Vuoi aiutare la riforestazione responsabile?

    Iscriviti a Ecologi e inizia a rimuovere la tua impronta ecologica (30 alberi extra usando il referral)

  9. #9
    Innanzitutto ti ringrazio per la risposta, però non mi funziona...

    la funzione js che uso è:
    codice:
    function diffDate(){
    	var diff;
    	
    	var l_prima = document.getElementById('data_arrivo').value;
    	var vett1 = l_prima.split(/[\-\.\/]/);
    	var prima = new Date(vett1[2], parseInt(vett1[1],10)-1, vett1[0]);
    	
    	var l_seconda = document.getElementById('data_partenza').value;
    	var vett2 = l_seconda.split(/[\-\.\/]/);
    	var seconda = new Date(vett2[2], parseInt(vett2[1],10)-1, vett2[0]);
    	
    	diff = (seconda - prima) / (1000 * 3600 * 24);
    	
    	if (diff<0)	alert("La data di partenza deve essere maggiore di quella d'arrivo!");
    	else document.getElementById('notti').value = diff;
    }
    e i due campi con le date sono questi:
    codice:
    <input type="text" name="data_arrivo" id="data_arrivo" value="<?php echo $data_arrivo; ?>" readonly="readonly" onchange="diffDate(); " /> 
    <input name="data_partenza" type="text" id="partenza" value="<?php echo $data_partenza; ?>" readonly="readonly" onchange="diffDate(); "  />
    li ho messi a readonly perché la data me la selezionano da un calendarietto che si apre in pop-up, onde evitare ulteriori controlli sul cmapo data.

    però quando cambio le due date il campo notti non si aggiorna. Si aggiorna solo se clicco sul campo di testo, in quanto ho messo l'esecuzione della funzione anche all'evento onclick sul campo notti:
    codice:
    <input name="notti" type="text" id="notti" value="<?php echo $notti; ?>" size="2" maxlength="2" onclick="diffDate(); " />

    ho fatto qualcosa di sbagliato? eh, mi sa di sì, se no funzionerebbe
    Talvolta anche una persona apparentemente inutile si rivela un abile samurai dalla forza di mille uomini, dimostrando di poter rinunciare alla vita e che il suo cuore si è completamente identificato con quello del suo padrone

  10. #10
    dai non potete abbandonarmi così ad un passo dal traguardo
    Talvolta anche una persona apparentemente inutile si rivela un abile samurai dalla forza di mille uomini, dimostrando di poter rinunciare alla vita e che il suo cuore si è completamente identificato con quello del suo padrone

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.