View Full Version : [PHP]problema con le date
cruyffissimo
06-11-2009, 07:33
ciao a tutti!!
ho un problema, vorrei inserire tramite un form una data formato europeo, ma si sa che mysql accetta o un datetime o una data in formato inglese.
il mio problema è tradurre la data europea in quella inglese, e se possibile, al momento della stampa, ritornare a quella europea...
grazie mille!!!
Cruyffissimo :sofico:
ciao a tutti!!
ho un problema, vorrei inserire tramite un form una data formato europeo, ma si sa che mysql accetta o un datetime o una data in formato inglese.
il mio problema è tradurre la data europea in quella inglese, e se possibile, al momento della stampa, ritornare a quella europea...
grazie mille!!!
Cruyffissimo :sofico:
Cosa intendi per data europea? Del tipo 6 Nov 2009 ?
MySQL accetta DATE, DATETIME e TIMESTAMP; puoi poi convertire questi tre formati in una data 'Human Like' :D
cruyffissimo
06-11-2009, 07:45
si, intendo gg/mm/aaaa..
esatto, ma non so farlo!
si, intendo gg/mm/aaaa..
esatto, ma non so farlo!
Poi mi dici dove hai preso il pupazzo, che lo voglio!
Allora hai varie strade da seguire:
a) memorizzi la data in TIMESTAMP (Int 32) e con la funzione date() di php ti ritorni la stringa della data formattata come vuoi, esempio:
date("%d %M %Y, $timestamp_da_db);
Ti tornerà qualcosa del tipo GG MM AAAA; maggiori dettagli qui: http://www.php.net/manual/en/function.date.php.
Occhio che il timestamp misura i secondi passati dalla mezzanotte del 1 gennaio 1970 sui sistemi *NIX.
b) memorizzi la data in formato stringa, attraverso la funzione date() e sei a posto, esempio:
date("%d %M %Y, time());(
Ovvero nel db ci finisce direttamente la stringa formattata.
Occhio a non confondere con il caso prima che nel db hai un intero.
c) utilizzi la funzione gmdate() per ottenere, come sopra, una data da timestamp in formato GMT/UTC (molto comoda, non so se fa a caso tuo); link: http://www.php.net/manual/en/function.gmdate.php
d) utilizzi la funzione strtotime() che converte, se non ricordo male, la datetime di mysql in unixtimestamp... che poi converti in data con date() o gmdate()
Penso ti possano bastare :D
cruyffissimo
06-11-2009, 08:38
ehi grazie!!!!
e sapessi...XD :stordita:
dopo ti posto come ho invertito le posizioni di gg-mm-aaaa...
grazie mille ancora
Cruyffissimo
ehi grazie!!!!
e sapessi...XD :stordita:
dopo ti posto come ho invertito le posizioni di gg-mm-aaaa...
grazie mille ancora
Cruyffissimo
Va bene, valuta tu quale strada prendere
cruyffissimo
06-11-2009, 08:51
list($giorno,$mese,$anno)=explode("/", $data_formato_europeo);
$data_formato_inglese=$anno."/".$mese."/".$giorno;
con $data_formato_europeo indico la data che inserisco dal form, e con data_formato_inglese indico la data nel formato come vuol il DB...
cmq il pupazzetto non ce l'ho, è una foto...ma lo sto cercando anche io!!!!
ma non lo trovo!!:muro:
Cruyffissimo
posso darti un consiglio?
se il form è accessibile da chiunque io non darei per scontato che il separatore usato sia per forza lo slash, molta gente usa il trattino e raramente mi è capitato di vedere il puntino.
P.S.: una precisazione, il formato che usi tu non è quello inglese ma quello ISO, il formato inglese è mm/dd/yyyy
ciao
posso darti un consiglio?
se il form è accessibile da chiunque io non darei per scontato che il separatore usato sia per forza lo slash, molta gente usa il trattino e raramente mi è capitato di vedere il puntino.
P.S.: una precisazione, il formato che usi tu non è quello inglese ma quello ISO, il formato inglese è mm/dd/yyyy
ciao
Si se la data proviene da un FORM è buona cosa pensare ad un cast del formato data, ovvero obbligare l'utente ad inserire la data in un certo modo oppure forzare la data tramite select, con lo str_replace, ecc... (ci sono centinaia di soluzioni a mio parere).
io per evitare tutti questi controlli solitamente creo 3 campi distinti: giorno, mese, anno.
mi rendo conto che è una cosa un po' grezza ma il suo lavoro lo fa.
un'altra cosa che mi ero dimenticato prima, controlla sempre le date tipo "31 febbraio" o cose simili, a questo scopo esistono gia delle funzioni belle pronte che ti risparmiano tutto il lavoro
io per evitare tutti questi controlli solitamente creo 3 campi distinti: giorno, mese, anno.
mi rendo conto che è una cosa un po' grezza ma il suo lavoro lo fa.
un'altra cosa che mi ero dimenticato prima, controlla sempre le date tipo "31 febbraio" o cose simili, a questo scopo esistono gia delle funzioni belle pronte che ti risparmiano tutto il lavoro
Anche io :D :D :D
Se no uso il mitico JQuery UI DatePicker... stupendo! :cool:
Se no uso il mitico JQuery UI DatePicker... stupendo! :cool:
essì, ormai è ora che anche io mi studi un po' di JS, dovrò cercare di ignorare il mio atavico ribrezzo nei confronti dei linguaggi di scripting lato client, vedrò cosa posso fare:fagiano:
cruyffissimo
06-11-2009, 19:14
si funziona anche con tre campi, ma a livello di codice si complica largamente la gestione del controllo...
insomma:
list($gg,$mm,$aa)=explode("-", $data);
if(!checkdate($mm,$gg,$aa))
{
echo "data non valida!<br>";
$flag=0;
}
else
{
$data=$aa."/".$mm."/".$gg;
}
all'inizio il campo data è quello che viene preso in input tramite un $_POST e poi per risparmiare memoria, lo si formatta,se valida la data in input, secondo il formato del database...
la discussione del separatore non esiste, o meglio, basta imporre che siano valide date solo con - o /...
io ho messo - perchè nel database voleva il - ma nulla mi vietava di mettere un str_replace
$data=str_replace("/","-","$data");
cioè poi ognuno lo fa come gli pare...
io l'ho fatto così perchè è meno incasinato...XD
grazie a tutti...
:sofico:
Cruyffissimo
sono abbastanza sicuro che mysql sia abbastanza astuto da rimpiazzare automaticamente i separatori con il simbolo -
ripeto, abbastanza, non del tutto...
essì, ormai è ora che anche io mi studi un po' di JS, dovrò cercare di ignorare il mio atavico ribrezzo nei confronti dei linguaggi di scripting lato client, vedrò cosa posso fare:fagiano:
Fino a 3 anni fa pure io lo odiavo... ma oggi non posso farne a meno (anche se non ci vado tutt'ora d'accordo).
Per MySQL... non ne sarei così sicuro :D
cruyffissimo
07-11-2009, 11:51
no infatti devi inserirlo con i / ma puoi sempre cambiarli con str_replace, se vuoi farlo più figo fai la ricerca per carattere, e a seconda se ci sono - o i / fai il tuo str_replace...
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.