Newsgroup: it.comp.lang.javascript
Titolo: conteggio dei giorni tra due date

Ho questo problema: dovrei contare il numero dei giorni tra due date post
anno 2000...praticamente dovrei fare (data2-data1)=numero di giorni.
chi mi da' una mano? :0)
thx

 (data2-data1)=numero di giorni.
Devi prima calcolare il numero di giorni a partire da una data fissa (ad
esempio 1 gennaio dell'anno zero) con questa formula:
N = 365*a+g+31*(m -1)-int(0.4*m+2.3)+int(a/4)-int(0.75*(int(a/100)+1))
Dove g, m, a sono rispettivamente il giorno, il mese e l'anno. Ad esempio
per il 9 aprile del 2001, g=9, m=4, a=2001. int vuol dire devi calcolare la
parte intera dell'espressione fra le parentesi seguenti.
La formula precedente vale solo a partire dal mese di marzo (m=3). Se m č
minore di 3 si puň continuare ad usare la formula precedente decrementando
di 1 l'anno (a=a-1) e incrementando di 12 il mese (m=m+12). In pratica,
gennaio viene considerato il mese 13 dell'anno precedente.
La formula vale per il calendario gregoriano, quindi per date posteriori al
1582.
Dopo aver calcolato il numero di giorni N1 per la prima data e N2 per la
seconda data, il numero di giorni fra le due date č dato dalla differenza
fra N2 e N1.
Se ci sono dubbi, sono sempre a disposizione.
Maurizio.

 seconda data, il numero di giorni fra le due date è dato dalla differenza


perche' non funziona?
-------------------------------------------
<HTML>
<HEAD>
<SCRIPT>
<!--
function calcolagiorni()
  {
  march=3;
  datainput1 = document.modulo.datain1.value;
  anni1 = datainput1.substr(6,4);
  mesi1 = datainput1.substr(3,2);
  giorni1 = datainput1.substr(0,2);
  if(mesi1 => march)
   {
   N1=
365*(anni1)+(giorni1)+31*((mesi1) -1)-int(0.4*(mesi1)+2.3)+int((anni1)/4)-in
t(0.75*(int((anni1)/100)+1));
   }
  if(mesi1 < march)
   {
   anni1=anni1-1;
   mesi1=mesi1+12;
   N1 =
365*(anni1)+(giorni1)+31*((mesi1) -1)-int(0.4*(mesi1)+2.3)+int((anni1)/4)-in
t(0.75*(int((anni1)/100)+1));
   }
 datainput2 = document.modulo.datain2.value;
 anni2 = datainput2.substr(6,4);
 mesi2 = datainput2.substr(3,2);
 giorni2 = datainput2.substr(0,2);
 if(mesi2 => march)
  {
  N2 =
365*(anni2)+(giorni2)+31*((mesi2) -1)-int(0.4*(mesi2)+2.3)+int((anni2)/4)-in
t(0.75*(int((anni2)/100)+1));
  }
 if(mesi2 < march)
  {
  anni2=anni2-1;
  mesi2=mesi2+12;
  N2 =
365*(anni2)+(giorni2)+31*((mesi2) -1)-int(0.4*(mesi2)+2.3)+int((anni2)/4)-in
t(0.75*(int((anni2)/100)+1));
  }
 giornidiff=N2-N1
 var risultato = +giornidiff+
 document.modulo.testo.value=risultato;
 }
//-->
</SCRIPT>
</HEAD>
<BODY>
<FORM NAME="modulo"> Giorno:
<INPUT TYPE="text" NAME="datain1" VALUE="gg/mm/aaaa" SIZE="11"
MAXLENGTH="10">
<INPUT TYPE="text" NAME="datain2" VALUE="gg/mm/aaaa" SIZE="11"
MAXLENGTH="10"> <BR>
<INPUT TYPE="button" VALUE=" Calcola " onClick="calcolagiorni()"> <BR>
<TEXTAREA NAME="testo" COLS="40" ROWS="3" WRAP="hard"></TEXTAREA> <BR>
</FORM>
</BODY>
</HTML>

Per calcolare giorni di distanza tra 2 date:
function datediff(unita,data1,data2) {
   //(C) CrioSoftware 2001
   var divisore;
   switch(String(unita).toUpperCase()) {
    case "D": divisore=1000*60*60*24;
           break;
    default: return "Non implementato";
   }
   d1=new
Date(String(data1).substr(3,3)+String(data1).substr(0,3)+String(data1).subst
r(6,4));
   d2=new
Date(String(data2).substr(3,3)+String(data2).substr(0,3)+String(data2).subst
r(6,4));
   return Math.round((d1.getTime()-d2.getTime())/divisore)*(-1);
  }
Le 2 date sono in formato italiano (es. 10/04/2001), poi la function inverte
mese e giorno.
Per fornire la data in questo formato:
function convertidata(s,oggi,orario) {
 //(C) CrioSoftware 2001
 //oggi="true" => non usa la data S ma data odierna
 // orario="true" => oltre la data restituisce anche ora e minuti
 if (((String(s)=="null")||(s==""))&&(oggi!="true")) return "";
 var dataord=(oggi!="true")?new Date(s):new Date();
 return
((String(dataord.getDate()).length==1)?"0":"")+dataord.getDate()+"/"+((Strin
g(dataord.getMonth()+1).length==1)?"0":"")+(dataord.getMonth()+1)+"/"+dataor
d.getYear()+((orario!="true")?"":"
"+((String(dataord.getHours()).length==1)?"0":"")+dataord.getHours()+":")+((
orario!="true")?"":((String(dataord.getMinutes()).length==1)?"0":"")+dataord
.getMinutes());
 }

 ha scritto nel messaggio
news:9aukl4$pnd$1...@fe2.cs.interbusiness.it...


 ha scritto nel messaggio
news:9aukl4$pnd$1...@fe2.cs.interbusiness.it...


a niente...:-(
passando unita="D" calcola i giorni di distanza; quando avrò tempo se
richiederò per esempio i secondi passerò "S" e calcolerò in modo diverso la
var divisore.
E' una variabile che ho messo perché mi tornerà utile in futuro, tutto qui.

 perche' non funziona?
Prova con questo:
-------------------------------------------------------
<HTML>
<HEAD>
<SCRIPT>
<!--
function n_giorni(data)
{
 mx = data.split("/");
 g = parseInt(mx[0]);
 m = parseInt(mx[1]);
 a = parseInt(mx[2]);
 if (m < 3) {
  m += 12;
   a--;
 }
 return
365*a+g+31*(m-1)-Math.floor(0.4*m+2.3)+Math.floor(a/4)-Math.floor(0.75*(Math
.floor(a/100)+1));
}
function calcola()
{
 n1 = n_giorni(document.modulo.datain1.value);
 n2 = n_giorni(document.modulo.datain2.value);
 document.modulo.testo.value=n2-n1;
 return n2-n1;
}
// -->
</SCRIPT>
</HEAD>
<BODY>
<FORM NAME="modulo"> Giorno:
<INPUT TYPE="text" NAME="datain1" VALUE="gg/mm/aaaa" SIZE="11"
MAXLENGTH="10">
<INPUT TYPE="text" NAME="datain2" VALUE="gg/mm/aaaa" SIZE="11"
MAXLENGTH="10"> <BR>
<INPUT TYPE="button" VALUE=" Calcola " onClick="calcola()"> <BR>
<TEXTAREA NAME="testo" COLS="40" ROWS="3" WRAP="hard"></TEXTAREA> <BR>
</FORM>
</BODY>
</HTML>
----------------------------------------------
Maurizio.

 anno 2000...praticamente dovrei fare (data2-data1)=numero di giorni.
Ma perche' complicarsi la vita con il calendario gregoriano ?
<SCRIPT language="JavaScript">
//                       Anno, mese, giorno
var data1 = new Date(2000,01,01);
var data2 = new Date(2001,04,12);
numero_giorni = parseInt(Math.abs(data2.getTime()-
data1.getTime())/(3600*24000),10);
alert(numero_giorni);
</SCRIPT>

 Ma perche' complicarsi la vita con il calendario gregoriano ?
In effetti me lo chiedevo anch'io. Il metodo tuo (che ho usato nel tutorial 
ovviamente) va bene all'indietro fino al 1970. Forse l'uso del calendario può 
essere utile, oltre che come esercizio di programmazione, per le date anteriori 
al 1970, perché il risultato, pur se non è "null" è comunque sbagliato.
-- 
Ciao, Riccardo
------------------------------------------------------------------------
WebMaster: ----> 
http://www.jsdir.com
 <---- (aka 
http://www.jspoint.it
)
              All the JavaScript you need
------------------------------------------------------------------------
               Nessun traguardo è abbastanza lontano.
------------------------------------------------------------------------