Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

strtotime() & date() weird behaviour when converting date in to same format as it was before

I have to convert date format in to mm-dd-yyyy I don't know what is the current date format it is dynamic so if I have dynamic date format is already in mm-dd-yyyy then date() function is returning below outout

    $date='02-13-2011';
    echo date('m-d-Y',strtotime($date));

output is

  01-01-1970

?>

http://codepad.org/AFZ6jel7

So I have to check if the date is already in mm-dd-yyyy then do not apply date formatting. Is there any other way do this? may be passing one other parameter in these functions or something similar.

Thanks.

like image 757
Shakti Singh Avatar asked Dec 17 '22 17:12

Shakti Singh


2 Answers

I strongly suspect that this is what's causing the problem:

Dates in the m/d/y or d-m-y formats are disambiguated by looking at the separator between the various components: if the separator is a slash (/), then the American m/d/y is assumed; whereas if the separator is a dash (-) or a dot (.), then the European d-m-y format is assumed.

(Found in the strtotime documentation.)

You've got dash separators, so it's assuming d-m-y format, parsing it as a month of 13, and thus effectively failing.

Options I can think of off the top of my head, without being a PHP developer:

  • If there's a function which allows you to explicitly say what format the string is in, use that.

    For example DateTime::createFromFormat()

  • Change your format to use slashes
  • Change your format to use d-m-y instead of m-d-y
like image 180
Jon Skeet Avatar answered Dec 19 '22 07:12

Jon Skeet


Replacing - with / for m-d-Y will help.

echo date('m-d-Y',strtotime(str_replace('-', '/', $date)));
like image 28
amitchd Avatar answered Dec 19 '22 05:12

amitchd