PDA

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:

vhost87
06-11-2009, 07:39
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!

vhost87
06-11-2009, 07:59
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

vhost87
06-11-2009, 08:42
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

kurts
06-11-2009, 09:05
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

vhost87
06-11-2009, 09:18
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).

kurts
06-11-2009, 09:27
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

vhost87
06-11-2009, 09:56
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:

kurts
06-11-2009, 19:12
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

kurts
06-11-2009, 19:17
sono abbastanza sicuro che mysql sia abbastanza astuto da rimpiazzare automaticamente i separatori con il simbolo -
ripeto, abbastanza, non del tutto...

vhost87
06-11-2009, 19:20
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...