Преобразование строки в дату и время



если у меня есть php строка в формате mm-dd-YYYY (например, 10-16-2003), как мне правильно преобразовать это в Date и DateTime в формате YYYY-mm-dd? Единственная причина, по которой я прошу обоих Date и DateTime это потому, что мне нужен один в одном месте, а другой в другом месте.

548   7  

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-16

Edit: вы также можете передать конструктор 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

    Ничего не найдено.