Преобразование строки в дату и время
если у меня есть php строка в формате mm-dd-YYYY (например, 10-16-2003), как мне правильно преобразовать это в Date и DateTime в формате YYYY-mm-dd? Единственная причина, по которой я прошу обоих Date и DateTime это потому, что мне нужен один в одном месте, а другой в другом месте.
7 ответов:
использовать
strtotime()на первом свидании тогдаdate('Y-m-d')чтобы преобразовать его обратно:$time = strtotime('10/16/2003'); $newformat = date('Y-m-d',$time); echo $newformat; // 2003-10-16обратите внимание, что есть разница между использованием косой черты
/и дефис-наstrtotime()
вы должны быть осторожны с m/d/Y и m-d-Y форматов. PHP считает
/означает m/d / Y и-чтобы означать d-m-Y. Я бы явно описал входной формат в этом случае:$ymd = DateTime::createFromFormat('m-d-Y', '10-16-2003')->format('Y-m-d');таким образом, вы не находитесь в капризах определенной интерпретации.
чтобы разобрать дату, вы должны использовать: DateTime:: createFromFormat ();
Ex:
$dateDE = "16/10/2013"; $dateUS = \DateTime::createFromFormat("d.m.Y", $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("d.m.Y", $dateDE); if (!$dateObj) { throw new \UnexpectedValueException("Could not parse the date: $date"); } $dateUS = $dateObj->format("m/d/Y");Теперь вместо сбоя вы получите исключение, которое вы можете поймать, распространить и т. д.
$dateDE имеет неправильный формат, он должен быть "16.10.2013";
$d = new DateTime('10-16-2003'); $timestamp = $d->getTimestamp(); // Unix timestamp $formatted_date = $d->format('Y-m-d'); // 2003-10-16Edit: вы также можете передать конструктор DateTimeZone в DateTime (), чтобы обеспечить создание даты для желаемого часового пояса, а не для сервера по умолчанию.
Если вы используете PHP 5.2 или high, используйте DateTime, как указано выше. этой статья поможет.
для первого свидания
$_firstDate = date("m-d-Y", strtotime($_yourDateString));Для Новой Даты
$_newDate = date("Y-m-d",strtotime($_yourDateString));
Если у вас есть формат dd-mm-yyyy, то в PHP он не будет работать так, как ожидалось. В PHP документе они имеют под руководство.
даты в форматах m/d/y или d-m-y разбираются путем просмотра разделитель между различными компонентами: если разделитель a Слэш ( / ), то предполагается американский m/d/y; тогда как если в качестве разделителя используется дефис (-) или точкой (.), то европейский формат d-m-y предполагается.
значит, вы просто не можете использовать, как вы желание. Когда вы пытаетесь использовать формат dd/mm/yyyy с этим, он удалит FALSE. Вы можете настроить следующее.
$date = "23/02/2013"; $timestamp = strtotime($date); if ($timestamp === FALSE) { $timestamp = strtotime(str_replace('/', '-', $date)); } echo $timestamp; // prints 1361577600
Comments