Podstawy
Najprostszym sposobem konwersji jednego formatu daty na inny jest użycie strtotime()
go date()
. strtotime()
przekształci datę w uniksowy znacznik czasu . Ten uniksowy znacznik czasu można następnie przekazać w date()
celu przekonwertowania go na nowy format.
$timestamp = strtotime('2008-07-01T22:35:17.02');
$new_date_format = date('Y-m-d H:i:s', $timestamp);
Lub jako jedna linijka:
$new_date_format = date('Y-m-d H:i:s', strtotime('2008-07-01T22:35:17.02'));
Pamiętaj, że strtotime()
data musi być w prawidłowym formacie . Niedostarczenie prawidłowego formatu spowoduje strtotime()
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()
:
$date = new DateTime('2008-07-01T22:35:17.02');
$new_date_format = $date->format('Y-m-d H:i:s');
Praca z uniksowymi znacznikami czasu
date()
bierze uniksowy znacznik czasu jako drugi parametr i zwraca sformatowaną datę:
$new_date_format = date('Y-m-d H:i:s', '1234567890');
DateTime () działa z uniksowymi znacznikami czasu, dodając @
przed znacznikiem czasu:
$date = new DateTime('@1234567890');
$new_date_format = $date->format('Y-m-d H:i:s');
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:
- Przytnij ostatnie trzy cyfry za pomocą
substr()
Przycinanie ostatnich trzech cyfr można uzyskać na kilka sposobów, ale użycie substr()
jest najłatwiejsze:
$timestamp = substr('1234567899000', -3);
- Podziel substrat przez 1000
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:
$timestamp = bcdiv('1234567899000', '1000');
Aby uzyskać uniksowy znacznik czasu, możesz użyć, strtotime()
który zwraca uniksowy znacznik czasu:
$timestamp = strtotime('1973-04-18');
Z DateTime () możesz korzystać DateTime::getTimestamp()
$date = new DateTime('2008-07-01T22:35:17.02');
$timestamp = $date->getTimestamp();
Jeśli korzystasz z PHP 5.2, możesz U
zamiast tego użyć opcji formatowania:
$date = new DateTime('2008-07-01T22:35:17.02');
$timestamp = $date->format('U');
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.
$date = DateTime::createFromFormat('F-d-Y h:i A', 'April-18-1973 9:48 AM');
$new_date_format = $date->format('Y-m-d H:i:s');
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:
$new_date_format = (new DateTime('2008-07-01T22:35:17.02'))->format('Y-m-d H:i:s');
$new_date_format = DateTime::createFromFormat('F-d-Y h:i A', 'April-18-1973 9:48 AM')->format('Y-m-d H:i:s');