Если у меня есть строка PHP в формате mm-dd-YYYY
(например, 10-16-2003), как правильно преобразовать ее в Date
а затем DateTime
в формате YYYY-mm-dd
? Единственная причина, по которой я запрашиваю Date
и DateTime
– это то, что мне нужно одно в одном месте, а другое – в другом месте.
Используйте strtotime()
в вашем первом дате, а затем date('Ym-d')
чтобы преобразовать его:
$time = strtotime('10/16/2003'); $newformat = date('Ym-d',$time); echo $newformat; // 2003-10-16
Обратите внимание, что существует разница между использованием функции косой черты /
и дефиса -
в функции strtotime()
. Процитировать по php.net:
Даты в форматах m / d / y или dmy устраняются неоднозначно, глядя на разделитель между различными компонентами: если разделитель является косой чертой (/), то предполагается, что американский m / d / y; тогда как если разделитель является тире (-) или точкой (.), тогда предполагается европейский формат dmy.
Вы должны быть осторожны с форматами m / d / Y и mdY. PHP рассматривает /
означает m / d / Y и -
означает dmY. В этом случае я бы явным образом описал формат ввода:
$ymd = DateTime::createFromFormat('md-Y', '10-16-2003')->format('Ym-d');
Таким образом, вы не находитесь в капризе определенной интерпретации.
$d = new DateTime('10-16-2003'); $timestamp = $d->getTimestamp(); // Unix timestamp $formatted_date = $d->format('Ym-d'); // 2003-10-16
Изменить: вы также можете передать конструктор DateTimeZone в DateTime (), чтобы обеспечить создание даты для требуемого часового пояса, а не для сервера по умолчанию.
Чтобы проанализировать дату, вы должны использовать: DateTime :: createFromFormat ();
Пример:
$dateDE = "16/10/2013"; $dateUS = \DateTime::createFromFormat("dmY", $dateDE)->format("m/d/Y");
Однако, осторожно, потому что это сбой:
PHP Fatal error: Call to a member function format() on a non-object
Вам действительно нужно проверить, что форматирование прошло хорошо, сначала:
$dateDE = "16/10/2013"; $dateObj = \DateTime::createFromFormat("dmY", $dateDE); if (!$dateObj) { throw new \UnexpectedValueException("Could not parse the date: $date"); } $dateUS = $dateObj->format("m/d/Y");
Теперь вместо сбоя вы получите исключение, которое вы можете поймать, размножить и т. Д.
$ dateDE имеет неправильный формат, он должен быть «16.10.2013»;
Если вы используете PHP 5.2 или high, используйте DateTime, как указано выше. Эта статья поможет.