2012-04-24 6 views

risposta

154

Date nei formati m/d/y o d-m-y sono disambiguare cercando al separatore tra i vari componenti: se il separatore è un barra (/), allora l'American m/d/y è assunto; mentre se il separatore è un trattino (-) o un punto (.), viene assunto il formato europeo d-m-y . Controllare more here.

Utilizzare la funzione di data predefinita.

$var = "20/04/2012"; 
echo date("Y-m-d", strtotime($var)); 

EDIT ho appena testato, e in qualche modo, PHP non funziona bene con il formato gg/mm/aaaa. Ecco un'altra soluzione.

$var = '20/04/2012'; 
$date = str_replace('/', '-', $var); 
echo date('Y-m-d', strtotime($date)); 
+1

Qui compare solo 1970-01-01 se sto utilizzando il formato gg/mm/aaaa. il formato mm/gg/aaaa va bene con questo codice. –

+20

@SibirajPR ** Le date nei formati m/d/y o d-m-y sono disambiguate osservando il separatore tra i vari componenti: se il separatore è una barra (/), viene assunto il m/d/y americano; mentre se il separatore è un trattino (-) o un punto (.), si presume il formato europeo dmy. ** Controlla di più qui: http://www.php.net/manual/en/function.strtotime.php – hjpotter92

+0

Grazie per la tua preziosa informazione. –

3

fare questo:

date('Y-m-d', strtotime('dd/mm/yyyy')); 

ma assicuratevi 'gg/mm/aaaa' è la data effettiva.

+0

Grazie, ha funzionato bene !! –

+1

Questo è problematico in quanto strtotime leggerà una data con il separatore '/' come americano, cioè 'm/d/Y' considerando' -' come europeo 'dmY'. Vedi i documenti edit e php della risposta accettata: http://php.net/manual/en/function.strtotime.php - Nota: Date in i formati m/d/y o dmy sono disambiguati da look al separatore tra i vari componenti: se il separatore è una barra (/), viene assunto il m/d/y americano; mentre se il separatore è un trattino (-) o un punto (.), si assume il formato europeo d-m-y. – haakym

20

Ecco un'altra soluzione non con data(). non così intelligente :)

$var = '20/04/2012'; 
echo implode("-", array_reverse(explode("/", $var))); 
+5

Se non è intelligente, perché è così intelligente. Non riesco a vedere alcun problema con questa soluzione e mi risparmia avvincente con date e località. Prestazioni garantite ogni volta. –

+0

@tosin Soluzione molto creativa! –

+0

Funzionerebbe solo se aggiungono lo 0 come il 05/04/2010, se lo scrivono il 5/4/2010 non funzionerà. – Shadowbob

2

mi piace sottolineare che sarebbe meglio durante la programmazione di utilizzare timestamp di data effettiva di rappresentare il tempo, è possibile utilizzare PHP per trasformare il valore "timestamp" in qualsiasi formato di data che vorresti.

+2

@VitorTyburski Non puoi essere serio? Qualsiasi programmatore professionista con la sua mente sa che memorizzare la data come Timestamp è il modo migliore per gestire la formattazione della data e aggiungere o rimuovere parti di tempo, perché basta aggiungere o sottrarre un numero di secondi al valore di timestamp. –

+0

Ho studiato e vedo il tuo punto. Hai ragione. Sebbene tu non abbia risposto alla domanda. –

+0

@VitorTyburski Perché hai rimosso il tuo primo commento allora? Dimostra solo che ti stai affidando troppo alla funzione "cancella" per nascondere i tuoi errori. Non ho risposto alla domanda perché quando ero sul thread, la risposta migliore era già lì, quindi volevo solo sottolineare che usare un valore di timestamp è una buona pratica. –