Newsgroup: it.comp.lang.javascript
Titolo: Calcolo data -data_ex = giorni....

dovrei calcolare la dif.
in giorni tra due date scritte in questo modo:
20000523-20000328
come posso fare?
Grazie,
F.

 wrote in message 8eu31j$kjv$1...@news.IT.net...

Ciao,
Io procederei in qst maniera:
-con delle subString() ricavare dalle due date il giorno, il mese e l'anno
-creare delle var data1 e data2 di tipo date con i valori che hai ricavato
prima
-convertire le due date ricavate in numeri (numero di giorni trascorsi dalla
data x)
-la sottrazione dei due valori numerici è la differenza tra le due date
espresse in giorni.
Per un problema simile ho creato dateToNum(), una funzioncina
(ottimizzabile, includo i commenti x una migliore comprensione) che converte
una data nel numero di giorni trascorsi dal 01/01/1500. La puoi usare pari
pari o adattare al tuo caso specifico (modificando la gestione delle
variabili gg, mm e aa).
La funzione utilizza lYear(), che serve a calcolare se un anno è bisestile
oppure no.
Includo le due funzioni, spero che possano esserti utili.
Ciao, blavoro
Ezio BOnsi
/*
   FUNCTION dateToNum (data)
   CALCOLO DEL NUMERO DI GIORNI TRASCORSI DAL 01/01/1500 ALLA DATA INDICATA.
   METODO UTILIZZATO: MATEMATICO
   FUNZIONA SOLO PER IL CALEDARIO GREGORIANO (DAL 15-10-1582 AL 31-12-2999)
   PARAMETRI:
      data  = DATA DI CUI CALCOLARE LA DIFFERENZA.
              DEVE ESSERE NEL FORMATO date
   USCITA:
      NUMERO DI GIORNI TRASCORSI DAL 01/01/1500 ALLA DATA INDICATA.
   NOTA:
      QUESTA FUNZIONE UTILIZZA LA FUNZIONE lYear() PER IL CONTROLLO DEGLI
      ANNI BISESTILI. RICORDARSI DI INSERIRE ANCHE DI QUESTA.
--------------------------------------------------------------------------
*/
function dateToNum (data) {
   // carico le variabili
   var gg = data.getDate()
   var mm = data.getMonth() + 1
   var aa = data.getYear()
   // correggo l'anno
   if (aa < 100) aa = aa + 1900
   var k = 0
   var i = 0
   var gg_tot
   var mesi = new Array (31,28,31,30,31,30,31,31,30,31,30,31)
  // --- 1ø PARTE: ANNI ---------------------------------------------------
                                     // SOMMO 365 O 366 PER TUTTI GLI
                                     // ANNI PRECEDENTI A QUELLO RICHIESTO
                                     // CONSIDERANDO I BISESTILI
                                     // ES.: DATA = 28-09-97
                                     //     SOMMO FINO AL 31-12-96 COMPRESO
                                  // PER VELOCIZZARE I CALCOLI PIU'
                                  // FREQUENTI (DATE RECENTI), SE L'ANNO
                                  // E' >=1900 SOMMO IL NUMERO FISSO 146097
                                  // CHE CORRISPONDE AL NUMERO DI GIORNI
                                  // DAL 01-01-1500 AL 01-01-1900
   if (aa < 1900) {
      k = 1500
      gg_tot = 0
   }
   else {
      k = 1900
      gg_tot = 146097
   }
   i = k
   for (i = k; i <= aa - 1; i++) {
      if (lYear(i) == 1) {
         gg_tot = gg_tot + 366
      }
      else {
         gg_tot = gg_tot + 365
      }
   }
  // ----------------------------------------------------------------------
// ----- 2ø PARTE: MESI ---------------------------------------------------
                                    // ORA CONSIDERO SOLO PIU' L'ANNO
                                    // RICHIESTO:
                                    // SOMMO I GIORNI DEI MESI PER TUTTI
                                    // QUELLI PRECEDENTI A QUELLO INDICATO
                                    // CONSIDERANDO L'EVENTUALE BISESTILE,
                                    // CIOE' SE MESE DI FEBBRAIO E ANNO
                                    // BISESTILE
                                    // ES.:DATA = 28-09-97:
                                    // SOMMO DA GENNAIO AD AGOSTO
                                    //  COMPRESO
   for (i = 1; i <= mm - 1; i++) {
      gg_tot = gg_tot + mesi[i-1]
      if (i == 2 && lYear(aa) == 1) gg_tot = gg_tot + 1
   }
   // ---------------------------------------------------------------------
   // ----- 3ø PARTE: GIORNI ----------------------------------------------
                                      // ORA CONSIDERO SOLO PIU' IL MESE
                                      // RICHIESTO:
                                      // SOMMO I GIORNI INDICATI E POI
                                      // SOTTRAGGO 1 DAL TOTALE, PERCHE'
                                      // HO INIZIATO A CONTARE DAL GIORNO 1
                                      // (01/01/1500 VIENE QUI CONSIDERATO
                                      // IL GIORNO 0. AL 02/01/1500 E'
                                      // TRASCORSO 1 GIORNO, INFATTI
                                      // 02/01/1500 - 01/01/1500 = 1).
   return gg_tot + gg - 1           // RISULTATO FINALE !!!
}
/*
ritorna falso se l'anno non è bisestile, altrimenti vero
Il parametro è una variabile numerica contenente solo l'anno, non una data!
*/
function lYear (Anno) {
   var ritorno = 0               // IMPOSTO NON BISESTILE
   if (Anno % 100 == 0) {             // SE ANNO SECOLARE
       if (Anno % 400 == 0) ritorno = 1      // SE DIVISIBILE PER 400
                                                      // E' BISESTILE
   }
   else {                                    // SE ANNO NON SECOLARE
      if (Anno % 4 == 0) ritorno = 1         // SE DIVISIBILE PER 4
                                                    // E'BISESTILE
   }
   return ritorno
}


iQA/AwUBORKdisQiRQIxAUAiEQJFfQCgklTNrLBILYTjDnVgWK/MZF7JpeMAn0G9
TuiqlbwhWAQZB88Juur4e5I9
=Ac1u
-----END PGP SIGNATURE-----

 wrote in message
HbzQ4.2754$Vo3....@news.infostrada.it...


> > 20000523-20000328
05/23/2000  - 03/28/2000
Chiaro?
Bye
F.

20000523-20000328
Mmmm.... io creerei dalle date (presumo due stringhe e non due numeri) due oggetti Date() e poi li sottrai:
var val1= "20000523"
var val2 = "20000328"
var data1=new Date(parseInt(val1.substring(0,4)), --parseInt(val1.substring(4,6)), parseInt(val1.substring(6,8)))
var data2=new Date(parseInt(val1.substring(0,4)), --parseInt(val1.substring(4,6)), parseInt(val1.substring(6,8)))
var diff= data1 - data2
diff se non sbaglio č la differenza in millisecondi. A questo punto č una stupidaggine ricavarsi i giorni...
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
<?xml version="1.0" encoding="UTF-8"?>
<sign>
<author>the fly on the net</author>
<description>il webmaster piů alto del mondo </description>
<a href="
http://www.probo.it/aoj
">Art of JavaS.</a>
<a href="
http://www.devil-inside.net/
">the devil inside</a>
<a href="mailto:
net...@netbusiness.it
">e-mail</a>
</sign>

 diff se non sbaglio è la differenza in millisecondi. A questo punto è una
stupidaggine ricavarsi i giorni...
Ah ah, JS mi permetteva già di sottrarre date! E io stupido che mi sono
andato a convertire una funzione da Qbasic ....
Certo, potevo evitarmelo .... non si finisce mai di imparare!
thanks Fly,
Ezio BOnsi

Grazie fly!
Bye
F.