Bardzo podoba mi się ta strtotime()
funkcja, ale instrukcja obsługi nie zawiera pełnego opisu obsługiwanych formatów dat. strtotime('dd/mm/YYYY')
nie działa, działa tylko z mm/dd/YYYY
formatem.
Jeśli mam datę w dd/mm/YYYY
formacie, jak mogę ją przekonwertować na YYYY-mm-dd
? Mogę to zrobić używając explode()
funkcji, ale myślę, że są lepsze rozwiązania.
str_replace('/', '-', $date);
Odpowiedzi:
Oto uproszczone rozwiązanie:
Wynik:
strtotime
Dokumentacja brzmi:źródło
echo date('Y-m-l', strtotime('01-01-2010'));
Wynik to2010-01-Friday
. Zatem dzień, który nadejdzie na koniec, zależy od tego, jak określisz format daty wdate
funkcji.$date = '25/05/2010'; $date = str_replace('/', '-', $date);
Dodatkowa linia nie jest konieczna do rozwiązania problemu.Możesz analizować daty z niestandardowego formatu (od PHP 5.3) za pomocą DateTime :: createFromFormat
(Na marginesie:
!
służy do resetowania nieokreślonych wartości do uniksowego znacznika czasu, tj. Czas będzie wynosił północ).Jeśli nie chcesz (lub nie możesz) używać PHP 5.3, pełna lista dostępnych formatów daty / czasu, które akceptuje strtotime, znajduje się na stronie podręcznika Formaty dat . Że strona bardziej dokładnie opisuje fakt, że
m/d/Y
wnioskuje sięd/m/Y
(ale można, jak wspomniano tutaj w odpowiedziach, stosowanied-m-Y
,d.m.Y
lubd\tm\tY
).W przeszłości uciekałem się również do szybkiego sposobu, o którym
str_replace
mowa w innej odpowiedzi, a także do samodzielnego analizowania ciągu daty do innego formatu, takiego jakźródło
To dobre rozwiązanie wielu problemów:
źródło
Z zapisu STRTOTIME Uwaga:
Daty w formatach m / d / r lub dmy są rozróżniane, patrząc na separator między różnymi składnikami: jeśli separatorem jest ukośnik (/), zakłada się amerykański m / d / r; natomiast jeśli separatorem jest myślnik (-) lub kropka (.), to zakłada się europejski format dmy.
To takie proste.
źródło
$t
i$t1
pokazują inny wynik. Sprawdziłem tak.$t=strtotime(date('d-m-Y'));
i$t1=strtotime(date('m/d/Y'));
prawdopodobnie powinno być najszybsze
zwróci to fałsz, jeśli format nie wygląda na właściwy, ale nie sprawdzi, czy data jest prawidłowa
źródło
Nie znalazłem lepszego rozwiązania. Można użyć
explode()
,preg_match_all()
itpMam taką statyczną funkcję pomocniczą
Prawdopodobnie jest na to lepsza nazwa, ale używam,
ausStrToTime()
ponieważ pasuje do australijskich dat (z którymi często mam do czynienia, będąc Australijczykiem). Lepszą nazwą byłaby prawdopodobnie nazwa standardowa, ale nie jestem pewien, co to jest.źródło
Próbowałem przekonwertować format ddmmyy na
date("Y-m-d"
format, ale nie działało, gdy przechodzę bezpośrednioddmmyy =date('dmy')
potem zdałem sobie sprawę, że musi to być format rrrr-mm-dd, więc. użyty podciąg do uporządkowania
następnie przeszedł do
date("Y-m-d",strtotime($strParam));
zadziałało!
źródło
$srchDate = date_format(date_create_from_format('d/m/Y', $srchDate), 'Y/m/d');
To zadziała dla Ciebie. Konwertujesz String na niestandardowy format daty, w którym możesz określić w PHP, jaki jest oryginalny format String, który został mu nadany. Teraz, gdy jest to format daty, możesz przekonwertować go na domyślny format daty PHP, który jest taki sam, jaki jest używany przez MySQL.
źródło
Czy otrzymujesz tę wartość z bazy danych? Jeśli tak, rozważ sformatowanie go w bazie danych (
date_format
na przykład użyj w mysql). Jeśli nie, eksplozja wartości może być najlepszym rozwiązaniem, ponieważ strtotime po prostu nie wydaje się doceniać wartości dd / mm / rrrr.źródło
Jeśli wiesz, że jest to dd / mm / RRRR, możesz zrobić:
Dopasuje daty w formacie d / m / RR lub dd / mm / RRRR (lub dowolna kombinacja tych dwóch) ...
Jeśli chcesz obsługiwać więcej separatorów niż tylko /, możesz zmienić wyrażenie regularne na:
A następnie dodaj dowolne znaki do
[/-]
bitu (uwaga, znak - musi być ostatni)źródło
\d
dla cyfr po przecinku, a nie[/d]
do przodu-slash lub D charakteru .To obejście jest prostsze i bardziej eleganckie niż Rozbij:
Nie musisz wiedzieć, w jakim formacie otrzymujesz datę, ale jeśli zawiera ukośniki, są one zastępowane kropkami i jest traktowane jako europejskie przez strtotime.
źródło
Najprostsze rozwiązanie jest takie:
źródło
To rozwiązanie, którego używam, nawet jeśli istnieje zero wiodące.
źródło
$ date_info = '20 / 02/2019 '; echo date ('Ym-d', strtotime (str_replace ('/', '-', $ date_info)));
źródło
To takie proste
źródło