formattare campo data

ciao, ho un db con un campo DATE e vorrei convertire il formato in dd/mm/yy. non riesco a capire come implementarlo però, nonostante abbia dato un occhio in giro.

per ora so che formatto la data così:

$format = '%d/%m/%y';

e questo è il mio campo data:

$data_corso=$POST['data_corso?];

che recupero da un form....

grazie

inviato 8 anni fa
gabar-el
X 0 X

Ciao,

puoi impostare un controllo Javascript sul form nell'inserimento della data in un formato da te scelto.

Qualche info la trovi qui:

http://www.regular-expressions.info/dates.html

 :bye:

Zeta

risposto 8 anni fa
zeta80
X 0 X

senza usare js, solo con php non si riesce? pensavo che settando il formato della data con php o in mysql avrei potuto stabilire in che modo doveva essere scritta......

risposto 8 anni fa
gabar-el
X 0 X

Ciao,

ecco qui 2 righe di codice php per verificare il formato della data  O0

$data = "01/02/2008";
# formato americano mm-dd-yyyy o mm dd yyyy o mm/dd/yyyy o mm.dd.yyyy
if (ereg("(0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])[- /.](19[0-9][0-9]|20[0-9][0-9])", $data) ) {
   echo $data;
}
# formato italiano dd-mm-yyyy o dd mm yyyy o dd/mm/yyyy o dd.mm.yyyy
if (ereg("(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19[0-9][0-9]|20[0-9][0-9])", $data) ) {
   echo $data;
}

Ti basta scegliere il formato di tuo interesse ed eliminare gli altri simboli dalle parentesi [- /.]. Se scelgo solo il "/" scriverò così: [/].

Ovviamente entro nell'if solo se il formato della data è corretto.

 :bye:

Zeta

risposto 8 anni fa
zeta80
X 0 X

grazie, ho capito bene lo script (anche se non so esattamente l'utilizzo di ereg), ma indipendentemente da che data metto e da come mi restituisce un errore che la data è incorretta, perchè?

Incorrect date value: '' for column 'data_corso' at row 1

questa la parte di script interessata:

if (ereg("(0[1-9]|[12][0-9]|3[01])[/](0[1-9]|1[012])[/](20[0-9][0-9])", $data_corso) ) {
               echo $data_corso=$_POST['data_corso'];
               }

thanks

risposto 8 anni fa
gabar-el
X 0 X

Certo che non va,

perché tu esegui il controllo su una variabile vuota e non su $_POST['data_corso'] che è quella corretta che ha il tuo valore.

 :bye:

Zeta

risposto 8 anni fa
zeta80
X 0 X

 :wallbash: scusa, ma non capisco, eppure mi sembra di aver afferrato il concetto, e le ho provate tutte, ma nulla...

io lo scrivo così:

if (ereg("(0[1-9]|[12][0-9]|3[01])[/](0[1-9]|1[012])[/](20[0-9][0-9])", $data_corso=$_POST['data_corso']) ) {
               $data_corso=$_POST['data_corso'];
               }

non va bene? faccio il controllo su quella variabile e poi la richiamo. ho tolto l'echo perchè non mi serve che mi stampi a schermo il risultato....

risposto 8 anni fa
gabar-el
X 0 X

@gabar-el:

Non ho capito esattamente cosa devi fare. Devi convertire una data da un formato all'altro? Devi verificare se una data espressa in un determinato formato è valida?

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

al momento il db mi prende solo il formato data yyyy/mm/dd io invece lo vorrei "italianizzare" dd/mm/yyyy

non so se devo dare anche una qualche opzione al db, ma direi che si fa tutto con php no?

grazie

risposto 8 anni fa
gabar-el
X 0 X

se ti serve fare solo una conversione da yyyy/mm/dd a dd/mm/yyyy in PHP puoi provare così:

$parti = explode('/', $data_dal_db);
echo $parti[2] . '/' . $parti[1] . '/' . $parti[0];

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

mmhhh..... mi restituisce un errore:

Incorrect date value: 'Array' for column 'data_corso' at row 1

io lo scrivo così:

$data_corso=explode('/', $_POST['data_corso']);
$data_corso[2].'/'.$data_corso[1].'/'.$data_corso[0];
risposto 8 anni fa
gabar-el
X 0 X

Ma perché usi $_POST['data_corso'] quando mi hai detto che la data proviene dal database e non da un form?

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

ops, mi confondi....

la data tramite un form viene scritta su un db e poi richiamata....

risposto 8 anni fa
gabar-el
X 0 X

ops, mi confondi....

la data tramite un form viene scritta su un db e poi richiamata....

ok, ma allora le conversioni devono essere 2, una che parte dalla data inserita dall'utente ($_POST) e la trasforma in una data adeguata al database e l'altra che fa' esattamente il contrario.

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

ok, mi sono documentato un minimo e ho risolto alcune cose. necessitavo solo del date_format per ciò che riguarda l'estrapolazione (ovvero mostrarla a video). Ora il mio problema è che vorrei consentire agli utenti di inserire la data in formato gg/mm/yy, cosa al momento non possibile. Come dovrei fare? ne ho provate tante ma ancora non sono riuscito....

grazie

risposto 8 anni fa
gabar-el
X 0 X

come ti ho scritto prima, puoi usare la funzione explode:

$data_inserita_dall_utente = "12/10/2007";

$parti = explode('/', $data_inserita_dall_utente);

echo $parti[2] . '/' . $parti[1] . '/' . $parti[0];

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

grazie gianni

cacchio! non ci salto fuori, eppure ho capito lo script....

io lo scrivo così:

$data_corso=$_POST['data_corso'];
$parti=explode('-', $data_corso);
$parti[2].'-'.$parti[1].'-'.$parti[0];

ho utilizzato "-" invece che "/".....

ma ancora mi dice che il formato non è valido.

ho capito cmq il funzionamento del tutto; con explode gli dico di "ribaltare" la data prima di scriverla nel db, che appunto in quest'ultimo verrà cmq scritta in formato yyyy/mm/dd, poi dal db la estrapolo ribaltandola nuovamente per visualizzarla nel formato gg/mm/aaaaa.

risposto 8 anni fa
gabar-el
X 0 X

Ciao,

cos'è che ti restituisce errore dicendo "il formato non è valido."? la query SQL o altro?

 :bye:

Zeta

risposto 8 anni fa
zeta80
X 0 X

di preciso non saprei, dalla mi esperienzissima direi la query di inserimento che non riconoscendo il formato nel db non riesce a scriverci e mi da questo errore:

Incorrect date value: '02-12-2009' for column 'data_corso' at row 1
risposto 8 anni fa
gabar-el
X 0 X

Ciao,

la data corretta da inserire è:

'2009-12-02'

 :bye:

Zeta

risposto 8 anni fa
zeta80
X 0 X

mmmhhh...... allora mi sa che non mi sono fatto capire.

la data nel form gli utenti la dovranno riuscire a inserire nel formato gg/mm/aa, questo direttamente dal form. è quello di cui parlo da inizio post, sono stato poco chiaro mi sa....

quando estrapolo la data dal db per renderla visibile riesco a visualizzarla tramite questo codice nel formato gg/mm/aa

date_format(data_corso, '%d-%m-%y') data_corso
echo $row['data_corso'];

ma il mio problema rimane il fatto che gli utenti dovranno avere la possibilità di inserirla nel formato di cui detto sopra....

thanks

risposto 8 anni fa
gabar-el
X 0 X

Se ricevi quel messaggio (Incorrect date value: '02-12-2009') significa che quando crei la query non inserisci la data ribaltata.

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

non sei stato chiaro  :D ..... non inserisco la data ribaltata dove? nella query? cioè, dovrei inserire del codice nella insert?

 :lamo:

risposto 8 anni fa
gabar-el
X 0 X

Certo, se non ribalti la data inserita dall'utente nella INSERT come pretendi che il database la inserisca correttamente?

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

ma scusa non la ribalto già con questo codice?

$data_corso=$_POST['data_corso'];
$parti=explode('-', $data_corso);
$parti[2].'-'.$parti[1].'-'.$parti[0];

altrimenti sto codice a che serve?

risposto 8 anni fa
gabar-el
X 0 X

si, quelle righe ribaltano la data ma il risultato non viene conservato da nessuna parte e $_POST['data_corso'] continua ad avere la data nel formato originale, ovvero quello inserito dall'utente.

Modificalo così:

$parti=explode('-', $_POST['data_corso'];);
$data_corso = $parti[2].'-'.$parti[1].'-'.$parti[0];

e poi nella INSERT devi usare $data_corso e non $_POST['data_corso'];

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

ok grazie, ho capito e funzia.

c'era un piccolo errore, un ";" di troppo.

$parti=explode('-', $_POST['data_corso'];);

mi meraviglio che me ne sono accorto....

grazie tante!

risposto 8 anni fa
gabar-el
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda