salve a tutti,
come faccio a controllare il formato della data di un browser (italiano, americano, etc...)?
salve a tutti,
come faccio a controllare il formato della data di un browser (italiano, americano, etc...)?
????
Cerca di spiegarti meglio.
Cosa vuoi testare? In quale modo un browser scrive la data? E perche`? A che ti serve?
In qualche caso forse e` possibile, ma devi essere piu` preciso.
Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
No domande tecniche in messaggi privati
allora...
devo manipolare delle stringhe di tipo "data", che ricevo da un normale campo text, e do per scontato che gli utenti le scrivano in modo corretto. Il problema è che alcuni di loro hanno la data impostata nel formato italiano (gg/mm/aaaa) e altri in formato inglese (mm/gg/aaaa). Per usare il costruttore Date(mm,gg,aaaa) devo sapere quale è il mese e quale il giorno.
Ho provato con il metodo date.parse, che però accetta una stringa in formato mm/gg/aaaa, calcolando il primo argomento modulo 12.
per esempio, ho provato così:
d = new Date();
mia data = d.setTime(Date.parse("25/10/2005"))
e il risultato è stato
"Wed Jan 10 00:00:00 UTC+0100 2007" (cioè ha preso 10 come giorno e ha trasformato 25 nel mese 1!!)
spero di essere stato chiaro
ciao
Quindi il tuo ragionamento e`:
Se l'utente ha il browser settato per l'inglese sicuramente scrivera` la data secondo la codifica americana, se ha il browser settato in italiano usera` la codifica europea.
Io non credo che questo sia corretto.
Anzitutto perche` gli inglesi (europei) scrivono la data gg/mm/aaaa (ma la leggono nel modo inglese); secondo perche` si trovano molti browser in lingua inglese anche in Italia (e nel resto del mondo); terzo perche` un modo altrettanto valido per scrivere uan data e` aaaa/mm/gg: questo e` il modo in cui il W3C consiglia di usare.
A mio parere la soluzione sta nello specificare l'ordine in cui si vuole il campo riempito, e poi testare (nei limiti del possibile) se l'utente ha seguito il consiglio.
Esempio:
inserisci la data (gg/mm/aaaa) |_________|
Poi per il test puoi sbizzarrirti con le RegExp, ad esempio:
/\d|([0-2]\d)|(3|[12])[\/\.\-]\d|(0[1-9])|(1[0-2])[\/\.\-]\d{2}|\d{4}/
Chiaramente questo test non puo` segnalare se uno scrive 9/11/2005, ma per i giorni superiori a 12 funziona.
Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
No domande tecniche in messaggi privati
io ho semplificato il problema, ma in realtà l'utente "non può" scegliere il formato, perché seleziona la data utilizzando una applet java, e il campo testo su cui la applet scrive la data è controllato da un'altra applicazione (sulla quale non posso intervenire) che ne forza il formato a quello impostato sul browser.
Per cui, se quello ha il browser settato sul formato inglese, e mi scrive 25/10/2005, gli viene segnalato un errore.
Quindi non posso chiedere all'utente di scrivermi la data in formato gg/mm/aaaa (altrimenti lo avrei già fatto), ma devo arrangiarmi con quello che mi manda
La cosa inizia a diventare interessante.
Io ti posso suggerire un trucco, ma devi implementarlo e testarlo (non l'ho mai fatto nemmeno io).
var prova = new Date(2005,9,25);
var str = prova.toLocaleString();
if(str.substr(0,10)=="25/09/2005") alert("formato data italiano");
else ...
Nota che devi verificare che il formato sia effettivamente quello della stringa che ho scritto io (fai un alert(str), prima), ed eventualmente modificare la stringa o usare un metodo piu` elastico (RegExp) per il test.
Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
No domande tecniche in messaggi privati
forse siamo sulla strada giusta...
il metodo tolocalestring restituisce "martedi 25 ottobre 2005 0.00.00", e da questo posso ricavare il formato, cazzu iu! :P
grazie!