Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Convert one date format into another in PHP

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?

like image 371
Tom Avatar asked Jan 30 '10 12:01

Tom


People also ask

How can get date in dd-mm-yyyy format in PHP?

Answer: Use the strtotime() Function You can first use the PHP strtotime() function to convert any textual datetime into Unix timestamp, then simply use the PHP date() function to convert this timestamp into desired date format. The following example will convert a date from yyyy-mm-dd format to dd-mm-yyyy.

Which function converts format from one file to another?

The easiest way to do this is by using the acmFormatChoose function, which displays a format-selection dialog box and returns the user's format choice. When you know the source and destination formats, you can use acmStreamOpen to open a conversion stream.

Which PHP function do you use to format date information?

The date_format() function returns a date formatted according to the specified format.


2 Answers

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);    
like image 87
Pekka Avatar answered Sep 18 '22 21:09

Pekka


The easiest way to do this is

$myDateTime = DateTime::createFromFormat('Y-m-d', $dateString); $newDateString = $myDateTime->format('m/d/Y'); 

You are first giving it the format $dateString is in. Then you are telling it the format you want $newDateString to be in.

This also avoids the use of strtotime, which can be hard to work with at times.

If you are not transforming from one date format to another, but just want the current date (or datetime) in a specific format then it's even easier:

$now = new DateTime(); $timestring = $now->format('Y-m-d h:i:s'); 

This other question also refers to the same topic: Convert date format yyyy-mm-dd => dd-mm-yyyy.

like image 29
ceiroa Avatar answered Sep 19 '22 21:09

ceiroa