Преобразование на сегодняшний день в PHP из формата yyyymmdd

У меня есть даты в следующем формате (yyyymmdd, 18751104, 19140722) … что это самый простой способ конвертировать его на сегодняшний день () …. или использует mktime () и подставляет мой лучший вариант …?

Используйте strtotime() для преобразования строки, содержащей дату, в метку времени Unix :

 <?php // both lines output 813470400 echo strtotime("19951012"), "\n", strtotime("12 October 1995"); ?> 

Вы можете передать результат в качестве второго параметра на date() чтобы переформатировать дату самостоятельно:

 <?php // prints 1995 Oct 12 echo date("YM d", strtotime("19951012")); ?> 

Заметка

strtotime() завершится с датами до эпохи Unix в начале 1970 года.

В качестве альтернативы, которая будет работать с датами до 1970 года:

 <?php // Returns the year as an offset since 1900, negative for years before $parts = strptime("18951012", "%Y%m%d"); $year = $parts['tm_year'] + 1900; // 1895 $day = $parts['tm_mday']; // 12 $month = $parts['tm_mon']; // 10 ?> 

Лично я просто использовал substr (), потому что это, вероятно, самый легкий способ сделать это в любом случае.

Но вот функция, которая принимает дату, из которой вы можете указать формат. Он возвращает ассоциативный массив, поэтому вы можете сделать, например, (непроверенный):

 $parsed_date = date_parse_from_format('Ymd', $date); $timestamp = mktime($parsed_date['year'], $parsed_date['month'], $parsed_date['day']); 

http://uk.php.net/manual/en/function.date-parse-from-format.php

Хотя я должен сказать, что я не считаю, что это проще или эффективнее, чем просто:

 mktime(substr($date, 0, 4), substr($date, 4, 2), substr($date, 6, 2)); 

взгляните на strptime

Хорошо спасибо за все ответы, но проблема 1900 года, похоже, поражает каждый полученный ответ. Вот копия функции, которую я использую, если кто-то найдет ее полезной для них в будущем.

 public static function nice_date($d){ $ms = array( 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December' ); $the_return = ''; $the_month = abs(substr($d,4,2)); if ($the_month != 0) { $the_return .= $ms[$the_month-1]; } $the_day = abs(substr($d,6,2)); if ($the_day != 0){ $the_return .= ' '.$the_day; } $the_year = substr($d,0,4); if ($the_year != 0){ if ($the_return != '') { $the_return .= ', '; } $the_return .= $the_year; } return $the_return; } 

(PHP 5> = 5.3.0, PHP 7):

Вы можете получить экземпляр DateTime с помощью:

 $dateTime = \DateTime::createFromFormat('Ymd|', '18951012'); 

и преобразовать его в метку времени:

 $timestamp = $dateTime->getTimestamp(); // -> -2342217600