Czy istnieje prosty sposób na konwersję jednego formatu daty na inny format daty w PHP?
Mam to:
$old_date = date('y-m-d-h-i-s'); // works
$middle = strtotime($old_date); // returns bool(false)
$new_date = date('Y-m-d H:i:s', $middle); // returns 1970-01-01 00:00:00
Ale oczywiście chciałbym, żeby zwróciła aktualną datę, a nie świt. Co ja robię źle?
Odpowiedzi:
Drugim parametrem
date()
musi być odpowiedni znacznik czasu (sekundy od 1 stycznia 1970 r.). Podajesz ciąg znaków, którego data () nie może rozpoznać.Możesz użyć strtotime () do konwersji ciągu daty na znacznik czasu. Jednak nawet strtotime () nie rozpoznaje
y-m-d-h-i-s
formatu.PHP 5.3 i nowsze
Zastosowanie
DateTime::createFromFormat
. Pozwala określić dokładną maskę - używającdate()
składni - do analizy dat ciągów przychodzących.PHP 5.2 i niższe
Będziesz musiał ręcznie przeanalizować elementy (rok, miesiąc, dzień, godzinę, minutę, sekundę) ręcznie, używając
substr()
wyników i przekazując wyniki do mktime () , która zbuduje znacznik czasu.Ale to dużo pracy! Polecam użycie innego formatu, który strftime () może zrozumieć. strftime () rozpoznaje dowolne dane wejściowe bez
the next time joe will slip on the ice
. na przykład to działa:źródło
DateTime
istnieje od PHP 5.2 w rdzeniu PHP, a wsparcie eksperymentalneDateTime
dla PHP 5.1 można włączyć podczas kompilacji. secure.php.net/manual/en/datetime.installation.phpNajłatwiej to zrobić
Najpierw nadajesz mu format $ dateString. Następnie mówisz, że chcesz, aby był to format $ newDateString.
Pozwala to również uniknąć używania strtotime, z którym czasami może być trudno pracować.
Jeśli nie przechodzisz z jednego formatu daty na inny, ale potrzebujesz tylko bieżącej daty (lub daty / godziny) w określonym formacie, jest to jeszcze łatwiejsze:
To drugie pytanie odnosi się również do tego samego tematu: Konwertuj format daty rrrr-mm-dd => dd-mm-rrrr .
źródło
$timestring = $now->format('Y-m-d h:i:s');
pewno?m
przez miesiące,i
przez minutyPodstawy
Najprostszym sposobem konwersji jednego formatu daty na inny jest użycie
strtotime()
godate()
.strtotime()
przekształci datę w uniksowy znacznik czasu . Ten uniksowy znacznik czasu można następnie przekazać wdate()
celu przekonwertowania go na nowy format.Lub jako jedna linijka:
Pamiętaj, że
strtotime()
data musi być w prawidłowym formacie . Niedostarczenie prawidłowego formatu spowodujestrtotime()
zwrócenie wartości false, co spowoduje wyświetlenie daty 1969-12-31.Za pomocą
DateTime()
Począwszy od PHP 5.2, PHP oferowało
DateTime()
klasę, która oferuje nam potężniejsze narzędzia do pracy z datami (i czasem). Możemy przepisać powyższy kod za pomocąDateTime()
:Praca z uniksowymi znacznikami czasu
date()
bierze uniksowy znacznik czasu jako drugi parametr i zwraca sformatowaną datę:DateTime () działa z uniksowymi znacznikami czasu, dodając
@
przed znacznikiem czasu:Jeśli posiadany znacznik czasu jest wyrażony w milisekundach (może kończyć się za
000
i / lub znacznik czasu ma trzynaście znaków), musisz przekonwertować go na sekundy, zanim będzie można przekonwertować go na inny format. Można to zrobić na dwa sposoby:substr()
Przycinanie ostatnich trzech cyfr można uzyskać na kilka sposobów, ale użycie
substr()
jest najłatwiejsze:Możesz także przekonwertować znacznik czasu na sekundy, dzieląc przez 1000. Ponieważ znacznik czasu jest zbyt duży, aby systemy 32-bitowe mogły wykonywać matematykę, musisz użyć biblioteki BCMath, aby wykonać matematykę jako ciągi znaków:
Aby uzyskać uniksowy znacznik czasu, możesz użyć,
strtotime()
który zwraca uniksowy znacznik czasu:Z DateTime () możesz korzystać
DateTime::getTimestamp()
Jeśli korzystasz z PHP 5.2, możesz
U
zamiast tego użyć opcji formatowania:Praca z niestandardowymi i niejednoznacznymi formatami dat
Niestety nie wszystkie daty, z którymi programista musi współpracować, mają standardowy format. Na szczęście PHP 5.3 dostarczyło nam na to rozwiązanie.
DateTime::createFromFormat()
pozwala nam powiedzieć PHP, w jakim formacie znajduje się ciąg daty, aby można go było pomyślnie przeanalizować w obiekcie DateTime w celu dalszej manipulacji.W PHP 5.4 uzyskaliśmy możliwość wykonywania dostępu członków klasy podczas tworzenia instancji, co pozwala nam zamienić nasz
DateTime()
kod w jednowierszowy:źródło
Spróbuj tego:
źródło
Aby przekonwertować
$date
zdd-mm-yyyy hh:mm:ss
na odpowiednią datę / godzinę MySQL, idę w następujący sposób:źródło
Fatal error: Call to a member function format() on a non-object
. Tylko głowa do góry!Poniżej przedstawiono łatwą metodę konwersji dat na różne formaty.
źródło
robisz tu źle, tak powinno być
separatorem czasu jest „:”
Myślę, że to pomoże ...
LUB
źródło
Ten natywny sposób pomoże przekonwertować dowolny wprowadzony format na żądany format.
źródło
Musisz przekonwertować $ old_date z powrotem na znacznik czasu, ponieważ funkcja daty wymaga znacznika czasu jako drugiego argumentu.
źródło
strtotime to rozwiąże. daty nie są takie same i wszystkie są w formacie US.
źródło
Spróbuj tego:
źródło
To rozwiązało dla mnie
Wyjście: 2018-04-18
źródło
Jest to inny sposób konwersji formatu daty
źródło
Używanie ciągów jest dla mnie dobrym rozwiązaniem, mniej problemów z mysql. Wykrywa bieżący format i zmienia go w razie potrzeby, to rozwiązanie jest tylko dla formatu hiszpańskiego / francuskiego i formatu angielskiego, bez użycia funkcji phetime datetime.
POSŁUGIWAĆ SIĘ
źródło
Wiem, że to stare, ale wpadając na dostawcę, który niekonsekwentnie używa 5 różnych formatów dat w swoich interfejsach API (i testuje serwery z różnymi wersjami PHP od 5 do ostatnich 7), postanowiłem napisać uniwersalny konwerter, który współpracuje z niezliczoną liczbą wersji PHP.
Ten konwerter pobierze praktycznie dowolne dane wejściowe, w tym dowolny standardowy format daty i godziny (w tym z lub bez milisekund) i godziny (w tym z milisekundami dowolną reprezentację czasu epoki (w tym z milisekundami lub bez) i skonwertuje go na dowolny inny format.
Aby to nazwać:
Wysłanie wartości null dla formatu spowoduje, że funkcja zwróci datę / godzinę w Epoce / czasie uniksowym. W przeciwnym razie wyślij dowolny ciąg formatu obsługiwany przez date (), a także z „.u” dla milisekund (ja również obsługuję milisekundy, nawet jeśli date () zwraca zera).
Oto kod:
Oto kilka przykładowych wywołań - zauważysz, że obsługuje on również dane strefy czasowej (chociaż jak wspomniano powyżej, czas inny niż GMT jest zwracany w Twojej strefie czasowej).
Oto wynik:
Jedyną rzeczą, której nie ma w tej wersji, jest możliwość wyboru strefy czasowej, w której ma być zwracana data i godzina. Początkowo napisałem to, aby zmienić dowolną datę i godzinę na Epoka, więc nie potrzebowałem obsługi strefy czasowej. Dodanie tego jest trywialne.
źródło