Convert one date format into another in PHP

date, date-conversion, datetime, format, php

Solution

The second parameter to `date()` needs to be a proper timestamp (seconds since January 1, 1970). You are passing a string, which date() can't recognize.

You can use strtotime() to convert a date string into a timestamp. However, even strtotime() doesn't recognize the `y-m-d-h-i-s` format.

PHP 5.3 and up

Use `DateTime::createFromFormat`. It allows you to specify an exact mask - using the `date()` syntax - to parse incoming string dates with.

PHP 5.2 and lower

You will have to parse the elements (year, month, day, hour, minute, second) manually using `substr()` and hand the results to mktime() that will build you a timestamp.

But that's a lot of work! I recommend using a different format that strftime() can understand. strftime() understands any date input short of `the next time joe will slip on the ice`. for example, this works:

$old_date = date('l, F d y h:i:s');              // returns Saturday, January 30 10 02:06:34
$old_date_timestamp = strtotime($old_date);
$new_date = date('Y-m-d H:i:s', $old_date_timestamp);   

Problem

Is there a simple way to convert one date format into another date format in PHP? I have this: ``` $old_date = date('y-m-d-h-i-s'); // works $middle = strtotime($old_date); // returns bool(false) $new_date = date('Y-m-d H:i:s', $middle); // returns 1970-01-01 00:00:00 ``` But I'd of course like it to return a current date rather than the crack 'o dawn. What am I doing wrong?

Original source

Related problems