Newsgroup: it.comp.lang.javascript
Titolo: Funzione confronto date.

Salve a tutti,
devo fare un controllo sulla data inserita in una casella di testo.
La data deve essere minore o uguale alla data odierna e
viene inserita tramite un controllo calendario, quindi è un valore valido.
Dovendo presentare un risultato visibile immediato, ho scritto la seguente
funzione:
//data presente nella casella di testo
var data=document.getElementById(codice).value;
//controllo la lunghezza della stringa, poi utilizzo la funzione per il
confronto:
 
	if (confrontodate(data)==false)
{alert('La data da inserire deve essere minore o uguale alla data di
odierna. \n Operazione annullata.');return }
function confrontodate(data) 
 {
 var d1= new Date();
 var a1=parseInt(d1.getFullYear());
 var m1=parseInt(d1.getMonth()+1);
 var g1=parseInt(d1.getDate());
 
 var d2=data.split("/")
 var a2=parseInt(d2[2]);
 var m2=parseInt(d2[1]);
 var g2=parseInt(d2[0]);
 
  if (a2 < a1)
 {return true;}
 if (a2 > a1)
 {return false;}
 if (m2 < m1)
 {return true;}
 if (m2 > m1)
 {return false;}
 if (g2 > g1)
 {return false;}
 return true;
 }
la funzione confrontodate è accettabile o meglio sostituirla di corsa ?
Grazie
giuseppeD
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 viene inserita tramite un controllo calendario, quindi è un valore valido.
Se è un valore valido (formato, da quel che leggo nella function che hai
scritto, dd/mm/yyyy), esiste getTime() che potrebbe fare al caso tuo.
Del tipo
 var d1=new Date();
 var d2=new Date(data.split("/")[2],data.split("/")[1],data.split("/")[0]);
 return d1.getTime()>d2.getTime;
Prova un po'.
-- 
"Ti sei salvato
 o sei entrato in banca pure tu?"
									    A.V.

 Prova un po'.
Utilizzo del metodo getTime
Dalla guida in linea di Visual Studio 2003:
Mediante il metodo getTime viene restituito un numero intero che
rappresenta il numero di millisecondi trascorsi tra la mezzanotte dell'1
gennaio 1970 e il valore dell'ora nell'oggetto Date.
Ho utilizzato il seguente codice:
function chiamadata()
 { var data='11/05/2005';
	var bb=confrontodate(data);
	alert(bb)
 }
 
 function confrontodate(data) 
 { var d1=new Date();
var d2=new Date(data.split("/")[2],data.split("/")[1],data.split("/")[0]);
return d1.getTime()>d2.getTime();
}
la risposta è false
La data di d1 è la data odierna, quindi 12/05/2005
ma i valori che ottengo nella finestra immediata sono i seguenti:
?d1.getTime()
1115900785755
?d2.getTime()
1118440800000
sembra che la data 12/05/2005 restituisce 1115900785755
e la data 11/05/2005 restituisce 1118440800000
Mi sembra che qualcosa non va.


 var d2=new Date(data.split("/")[2],data.split("/")[1],data.split("/")[0]);
Ops...
i mesi vanno da 0 a 11; quindi come secondo parametro va sottratto 1 al
mese, del tipo
 parseInt(data.split("/")[1])-1
-- 
"That until there is no longer first class
And second class citizens of any nation
Until the colour of a man's skin
Is of no more significance than the colour of his eyes
Me say war"
B.M.

 }
function confrontodate(sDateString){
	var	d1 = ( new Date() ),
		aD = sDateString.split("/"),
		d2 = new Date(+aD[2],+aD[1]-1,+aD[0]);
 
	return (d2.getTime()<=d1.getTime());
}
Ora dovrebbe andare. Mancava la sottrazione di uno al conto del mese. Come
da specifiche, Gennaio è considerato 0. Quindi inserendo come valore
cinque, la data era riferita a Giugno, non a Maggio.
Il segno di uguaglianza l'ho messo per mero scrupolo, serve solo nel caso
in cui il controllo venga effettuato alla mezzanotte del giorno stesso, con
zero ore, minuti, secondi e millisecondi. Una probabilità piuttosto bassa,
verità, ma da tener di conto.
-- 
ZER0
~ .. six thousand and thirty eight days, eight hours, six minutes, thirty six seconds.
That is when the world ended.

Cristiano Larghi ha scritto:
ZER0 ha scritto:
[taglio]
Di seguito sembra funzionare:
function chiamadata()
 {	var data=document.getElementById('inp11').value;//es. di data inserita
11/05/2005	
	var bb=confrontodate(data);
	alert(bb) }
 
 function confrontodate(sDateString) 
 { var d1=new Date(); 
 aD = sDateString.split("/");
d2 = new Date(+aD[2],+aD[1]-1,+aD[0]);  
return d1.getTime()>= d2.getTime();
}
ho notato che se invece di d1.getTime()>=
sposto il carattere =
cioč:
d1.getTime()=>
segnala un errore di sintassi.
Grazie 


 segnala un errore di sintassi.
Beh, ovviamente. Perché il simbolo di "minore o uguale" è, appunto, >= e
non =>.
-- 
ZER0
~ .. six thousand and thirty eight days, eight hours, forty nine minutes, three seconds.


 		d2 = new Date(+aD[2],+aD[1]-1,+aD[0]);
?
Cos'è quel + ad inizio di ogni parametro?
-- 
"e mai che mi sia venuto in mente
 di essere più ubriaco di voi
 di essere molto più ubriaco di voi"
									  F.D.A.

 Cos'è quel + ad inizio di ogni parametro?
Questione di abitudine. Forza l'engine a intendere quella variabile come
numerica. In sostanza fa una sorta di casting. In verità in questo
particolare caso poteva anche essere omesso:
d2 = new Date(aD[2],aD[1]-1,aD[0]);
In quanto la sottrazione ha il medesimo effetto: forza a intendere il mese
come numerico e non come stringa, ottenendo il risultato corretto.. in
quanto di una stringa non si possono fare sottrazioni. Mentre, come ben
sai:
aD[1]+1
avrebbe avuto come risultato una stringa concatenata. Con:
+aD[1]+1
avrebbe dato la somma dei numeri.
Ma non è la prima volta che uso questa sintassi, nel NG..
-- 
ZER0
~ .. six thousand and thirty eight days, nine hours, forty minutes,zero seconds.


 Ma non è la prima volta che uso questa sintassi, nel NG..
Mai notato (o non me lo ricordavo)
come dice Homer (di cui sto facendo scorpacciate in questo periodo, e
quindi mi sento un po' lui): miiiitico!
-- 
"Ho smesso di fumare.
 Vivrò una settimana di più.
 E in quella settimana pioverà a dirotto"
									    W.A.

 quindi mi sento un po' lui): miiiitico!
Beato te.. dovrei mettermi la tv in ufficio per poterli vedere :P
-- 
ZER0
~ .. six thousand and thirty nine days, six hours, eighteen minutes, ten seconds.


 Beato te.. dovrei mettermi la tv in ufficio per poterli vedere :P
Se vuoi te li passo, saranno una decina di dvd (formato però divx). Io come
ti dicevo li vedo in tv con xbox...
(sarà illegale anche avere in divx le puntate dei Simpsons, registrate da
me stesso dalla tv? boh...forse dipende se è stato fatto o meno il dvd?)


 me stesso dalla tv? boh...forse dipende se è stato fatto o meno il dvd?)
Boh, non so. Se è per uso personale non credo. Insomma, allora ogni volta
che uno si registra qualcosa in tv con il VHS perché non può essere a casa,
compie un atto illegale? (dato che siamo in italia, non mi stupirei se
fosse così, ma insomma..)
-- 
ZER0
~ .. six thousand and thirty nine days, seven hours, nineteen minutes, forty one seconds.


 fosse così, ma insomma..)
Secondo me è illegale anche videoregistrare un film in tv, se questo film
esiste in vendita in videocassetta...però vado a logica, non lo so per
certo. E secondo me comunque i Simpsons non esistono in vendita.


 E secondo me comunque i Simpsons non esistono in vendita.
Ci sono invece.. Anche se non tutti gli episodi, ma solo una sorta di
"speciali", o "collection".. qualcosa del genere.
-- 
ZER0
~ .. six thousand and thirty nine days, seven hours, forty four minutes, thirty six seconds.


 "speciali", o "collection".. qualcosa del genere.
Tipo la puntata con Mulder e la Scully, spettacolare! :-)


 iniqua vale solo se il film o altro non è stato ancora trasmesso in tv?
Non ho letto a dovere, ma se hai interesse nell'approfondire la questione:
http://www.unonet.it/normativa/l633_41.pdf
-- 
ZER0
~ .. six thousand and thirty nine days, eight hours, thirty two minutes, fifty nine seconds.


 E qui, credo, caschi l'asino. ^_^;
Eggià...quanto sono pirla! (pirla!="uno che fa giravolte", pirla=="piccolo
coglioncello"...) :-/
