2012-04-24 18 views

Odpowiedz

154

daty m/d/y lub d-m-y formatów są ujednoznacznione patrząc w separatora pomiędzy różnymi składnikami: jeśli separator jest ukośnik (/), to amerykański m/d/y Zakłada; natomiast jeśli separatorem jest myślnik (-) lub kropka (.), przyjmuje się format europejski d-m-y . Sprawdź more here.

Użyj domyślnej funkcji daty.

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

EDIT Właśnie testowałem go i jakoś, PHP nie działa dobrze w formacie dd/mm/rrrr. Oto inne rozwiązanie.

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

Tutaj otrzymuję tylko 1970-01-01 jeśli używam formatu dd/mm/rrrr. Format mm/dd/rrrr jest zgodny z tym kodem. –

+20

@SibirajPR ** Daty w formatach m/d/y lub d-m-y są ujednoznaczniane przez obserwację separatora między różnymi komponentami: jeśli separator jest ukośnikiem (/), wówczas przyjmuje się amerykański m/d/y; jeśli separatorem jest myślnik (-) lub kropka (.), przyjmuje się europejski format dmy. ** Więcej informacji tutaj: http://www.php.net/manual/en/function.strtotime.php – hjpotter92

+0

Dziękujemy za cenne informacje. –

3

Wykonaj:

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

ale upewnij się, 'dd/mm/rrrr' jest faktyczna data.

+0

Dzięki, to zadziałało !! –

+1

To jest problematyczne, ponieważ strtotime odczyta datę z separatorem '/' jako amerykański, tj. 'm/d/Y' podczas gdy' -' jako europejski 'dmY'. Zobacz edytowaną wersję i php docs: http://php.net/manual/en/function.strtotime.php - Uwaga: Daty w formaty m/d/y lub dmy są ujednoznaczniane przez wygląd w separatorze między różnymi komponentami: jeśli separator jest ukośnikiem (/), wówczas przyjmuje się amerykański m/d/y; jeśli separatorem jest myślnik (-) lub kropka (.), przyjmuje się europejski format d-m-y. – haakym

20

Oto inne rozwiązanie nie używając terminu(). Nie tak mądry :)

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

Jeśli nie jest sprytny, dlaczego jest taki sprytny. Nie widzę żadnych problemów z tym rozwiązaniem i oszczędza się wkręcanie w daty i miejscowości. Gwarantowana wydajność za każdym razem. –

+0

@tosin Bardzo kreatywne rozwiązanie! –

+0

To zadziała tylko wtedy, gdy dodadzą 0, jak 05/04/2010, jeśli to piszą 5/4/2010, to nie zadziała. – Shadowbob

2

I lubił pamiętać, że byłoby lepiej używać podczas programowania datownik niż rzeczywista data do reprezentowania czasu, można użyć PHP do przekształcania wartości „timestamp” do dowolnego formatu daty, której chcesz.

+2

@VitorTyburski Nie możesz być poważny? Każdy profesjonalny programista o właściwym umyśle wie, że przechowywanie daty jako znacznika czasu jest najlepszym sposobem radzenia sobie z formatowaniem daty i dodawaniem lub usuwaniem bitów czasu, ponieważ wystarczy tylko dodać lub odjąć kilka sekund do wartości znacznika czasu. –

+0

Przeszłam przez niektóre badania i zrozumiałam twój punkt widzenia. Masz rację. Chociaż nie odpowiedziałeś na pytanie. –

+0

@VitorTyburski Dlaczego usunąłeś wtedy swój pierwszy komentarz? To pokazuje, że polegasz zbyt wiele na funkcji "usuwania", aby ukryć swoje błędy. Nie odpowiedziałem na to pytanie, ponieważ zanim byłem w wątku, najlepsza odpowiedź już tam była, więc chciałem tylko podkreślić, że używanie wartości znacznika czasu jest dobrą praktyką. –