Newsgroup: it.comp.lang.javascript
Titolo: Date

Ciao....il mio problema è questo
ho due campi di tipo testo dove inserisco una data...il primo è
editabile mentre il secondo no....Nel momento in cui inserisco la data
nel primo campo il secondo dovrebbe prendere il valore del primo - 1
giorno tenendo conto degli anni bisestili, dei 30 e dei 31
ecc..ecc.....sapete dirmi come fare????Esiste qualcosa di già
pronto????E se si dove???
Grazie per l'aiuto...Igor
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

per sommare/sottrarre giorni: detta d la tua data dovrebbe essere un
qualcosa del tipo:
var data=new Date(d.getTime()+1000*60*60*24*giornidasommareosottrarre);
(se dai un valore negativo dovrebbe fare un -1)

 wrote in message
news:aoejbc$ld720$
1...@ID-147253.news.dfncis.de



se ho ben capito:
 - prendi il campo a (diamo per scontato che sia una data valida, vero?)
 - crei una data javascript (potrebbe bastare un new Date(a), oppure
spezzetti in anno-mese-giorno e fai new Date(anno,mese-1,giorno);
 - applichi la sottrazione come indicato;
 - riformatti il campo (per avere anno-mese-giorno:
getFullYear(),getMonth()+1,getDate())

 var data=new Date(d.getTime()+1000*60*60*24*giornidasommareosottrarre);
Fai attenzione, ci sono 2 giorni ogni anno che non hanno 24 ore, ma 23 e 25.
Maurizio.

eggià...
ma così ad occhio direi che il calcolo sballa se si sommano più di
365*(23/2) giorni...corretto?

 365*(23/2) giorni...corretto?


A chi possa interessare ho scoperto un baco(non so se voluto) nel
getYear()...nel momento
in cui si incontra il '1900' da come risultato '0'...ho dovuto
quindi aggiungere un nuovo controllo : 
<html>
<script>
function clcGrn(input){
	var giorno=input.substring(0,2);
	var mese=input.substring(3,5);
	var anno=input.substring(6,10);
	alert('Giorno : ' +giorno+ '       Mese : ' +mese+ '         Anno
:'+anno )
var newD=new Date(anno,mese-1,giorno-1);
var ms= newD.getMonth()+1;
var newG=newD.getDate();
var newM=newD.getMonth()+1;
var newA=newD.getYear();
if(newG<10){newG='0'+newG;}
if(newM<10){newM='0'+newM;}
if(newA==0){newA='1900'}
alert(newA)
var nuovaData=newG+'/'+newM+'/'+newA;
alert(nuovaData)
}
</script>
<form>
<input type="text" name="anno" value="" onChange="clcGrn(this.value)">
</form>
</html>


Io uso sempre getFullYear() per avere l'anno completo; per getYear() ti
riporto documentazione di Microsoft (stranamente chiara...)
This method is obsolete, and is provided for backwards compatibility only.
Use the getFullYear method instead.
For the years 1900 though 1999, the year is a 2-digit integer value returned
as the difference between the stored year and 1900. For dates outside that
period, the 4-digit year is returned. For example, 1996 is returned as 96,
but 1825 and 2025 are returned as-is.
Note   For JScript version 1.0, getYear returns a value that is the result
of the subtraction of 1900 from the year value in the provided Date object,
regardless of the value of the year. For example, the year 1899 is returned
as -1 and the year 2000 is returned as 100

 piů di 365*(23/2) giorni...corretto?
No, anche per 1 solo giorno. Prova questo script:
    d = new Date(2002, 9, 27, 23, 0, 0);
    document.write(d + "<br>");
    offset = -1;
    var data=new Date(d.getTime()+1000*60*60*24*offset);
    document.write(data);
Maurizio.

Non riesco a provarlo...dal 27/09/02 23:00 dovrebbe restituire correttamente
il giorno 26/09/02...e invece cosa restituisce?

 correttamente il giorno 26/09/02...e invece cosa restituisce?
Restituisce 27 ott 2002 00.00. In questo giorno, alle ore 2.00, togliendo 1
ora ti ritrovi sempre alle 2.00
Invece il 1 aprile 2002 00.00 riporta 30 marzo 2002 23.00, cioč 2 giorni
prima.
Maurizio.

Ok, questa devo tenermela a mente (un po' troppe ultimamente...:\ )
se però togli l'orario (o lasci 0,0,0) il problema scompare, a mio
parere...o no?

 parere...o no?
No, non scompare. Come hai visto avevo messo anche questa data:
| 1 aprile 2002 00.00
Il problema è che il 27 ott 2002 ha 25 ore e non 24 e non puoi tornare
indietro di 24 ore per andare al giorno precedente. Credo che l'unica
soluzione per evitare questi tranelli sia:
    d.setDate(d.getDate() + offset)
In questa maniera ci si sposta la giorno precedente alla stessa ora,
indipendentemente che vi siano 23, 24 o 25 ore.
Maurizio.

 giorno
Presupponendo che il campo di testo si chiami "nomecampo" e quello in cui
devi scrivere il valore si chiami "altrocampo", che facciano parte della
prima form del documento, e che sia una data valida (cosa che non e' certa,
e quindi ti consiglio di fare un check su questo):
var mydate=new Date(document.forms[0].nomecampo.value);
mydate.setDate(mydate.getDate()-1);
document.forms[0].altrocampo.value=mydate.getDate()+"/"+(mydate.getMonth()+1)+"/"+mydate.getFullyear();
Questo e' il codice stringato.. poi te lo sistemi come preferisci.
--------------------------------
Inviato via 
http://usenet.libero.it

miiii....
carino questo setDate() che prende il numero di giorni, pensa te che per
dare un dateadd di 7 giorni avevo fatto una funzione ricorsiva...sai, quelle
procedure che trovi un giorno in giro mentre stai imparando il linguaggio e
che poi le usi sempre senza cercare altro...
Grazie

 Fai attenzione, ci sono 2 giorni ogni anno che non hanno 24 ore, ma 23 e 25.
Eh?
Questa mi giunge del tutto nuova... me la spiegate please? :-o
-- 
Ciao, Riccardo
------------------------------------------------------------------------
http://www.jsdir.com
 ---- Bring Your Site To Life!!!!
------------------------------------------------------------------------
http://www.dev2dev.it
 - La rete ha connesso nuove particelle - D2D006
------------------------------------------------------------------------
 ----> itALY = it <----

ora solare/ora comesichiama...in effetti il dateadd fatto in questo modo mi
frega nei giorni indicati da Maurizio (ho già sistemato i miei snippets con
la variazione proposta)

 la variazione proposta)
Ah... :-)
Mado' pensavo chissache'!


 Questa mi giunge del tutto nuova... me la spiegate please? :-o
Immediatamente! Si tratta dei due giorni in cui vi è il passaggio dall'ora
solare a quella legale (ultima domenica di ottobre, 25 ore) e viceversa
(ultima domenica di marzo, 23 ore).
D'altra parte basta provare:
    d = new Date(2002, 2, 31);
    d1 = new Date(2002, 3, 1);
    document.write(d + "<br>" + d1 + "<br>");
e già questo far sospettare qualcosa perché, per quanto sembri tutto
corretto, nella prima data appare un GMT+0100, mentre nella seconda
GMT+0200.
Se si continua poi con:
    diff = (d1 - d) / (60 * 60 * 1000);
    document.write(diff + "<br>");
viene stampato 23 e non 24.
Maurizio.