Jeśli mam ciąg PHP w formacie mm-dd-YYYY
(na przykład, 10-16-2003), jak poprawnie przekonwertować go na Date
a następnie DateTime
w formacie YYYYY-mm-dd
? Jedynym powodem, dla którego pytam o oba Date
i DateTime
jest to, że potrzebuję jednego w jednym miejscu, a drugiego w innym.
Użyj strtotime()
na swojej pierwszej dacie, a następnie date('Y-m-d')
aby przekonwertować ją z powrotem:
$time = strtotime('10/16/2003');
$newformat = date('Y-m-d',$time);
echo $newformat;
// 2003-10-16
Zwróć uwagę, że istnieje różnica między użyciem ukośnika /
i myślnika -
w funkcji strtotime()
. Cytując z php.net:
Daty w formatach m/d/y lub d-m-y. są rozróżniane przez patrzenie na separator pomiędzy poszczególnymi elementami: jeśli separatorem jest ukośnik (/), to przyjmuje się amerykańskie m/d/y. zakładane; natomiast jeśli separatorem jest myślnik (-) lub kropka (.), wówczas > przyjmuje się amerykańskie m/d/y. przyjmuje się europejski format d-m-y.
Musisz być ostrożny z formatami m/d/Y i m-d-Y. PHP uważa /
za oznaczające m/d/Y, a -
za oznaczające d-m-Y. W tym przypadku wyraźnie opisałbym format danych wejściowych:
$ymd = DateTime::createFromFormat('m-d-Y', '10-16-2003')->format('Y-m-d');
W ten sposób nie jesteś zdany na kaprysy pewnej interpretacji.
$d = new DateTime('10-16-2003');
$timestamp = $d->getTimestamp(); // Unix timestamp
$formatted_date = $d->format('Y-m-d'); // 2003-10-16
Edit: możesz również przekazać DateTimeZone do konstruktora DateTime(), aby zapewnić utworzenie daty dla żądanej strefy czasowej, a nie domyślnej dla serwera.