Converting to date in PHP from yyyymmdd format
Use strtotime()
to convert a string containing a date into a Unix timestamp:
<?php
// both lines output 813470400
echo strtotime("19951012"), "\n",
strtotime("12 October 1995");
?>
You can pass the result as the second parameter to date()
to reformat the date yourself:
<?php
// prints 1995 Oct 12
echo date("Y M d", strtotime("19951012"));
?>
Note
strtotime()
will fail with dates before the Unix epoch at the start of 1970.
As an alternative which will work with dates before 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
?>
(PHP 5 >= 5.3.0, PHP 7):
You can get a DateTime instance with:
$dateTime = \DateTime::createFromFormat('Ymd|', '18951012');
and convert it to a timestamp:
$timestamp = $dateTime->getTimestamp();
// -> -2342217600
Personally, I'd just use substr() because it's probably the lightest way to do it anyway.
But here's a function that takes a date, of which you can specify the format. It returns an associative array, so you could do for example (untested):
$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
Although I must say, I don't find that any easier or more effective than simply:
mktime(substr($date, 0, 4), substr($date, 4, 2), substr($date, 6, 2));