Jason
Jason

Reputation: 431

Date format not working correctly

Im submitting a form that has a date range picker in it.

I have the code to get the value of the picker from the form, which is in this format:

01/03/2017 - 01/03/2017

I also have it so that it splits the date range into two variables.

$one = 20/01/2017
$two = 13/03/2017

Im now trying to format the date of these variables into the one that MYSQL uses.

My problem is that the end date will fail and be displayed as 1970-01-01 all the time.

// Get the range from the form
$daterange = $_POST["daterange"];

// Split the range into a start and end date
list($one, $two) = explode("-", "$daterange", 2);

// Test the split worked
echo $one;
echo $two;

// Format the start date into MySQL style
$StartDate = date("Y-m-d", strtotime($one));

// Test date
echo $StartDate;

// Format the end date into MySQL style
$EndDate = date("Y-m-d", strtotime($two));

//Test date
echo $EndDate;

Upvotes: 0

Views: 1758

Answers (3)

Mayank Pandeyz
Mayank Pandeyz

Reputation: 26258

Try this:

$one = '20/01/2017';
$one = str_replace('/', '-', $one);
echo date('Y-m-d', strtotime($one));

// Output: 2017-01-20

Working Code

For the reason, see The PHP Manual for strtotime() Specifically this note

Note: 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. If, however, the year is given in a two digit format and the separator is a dash (-, the date string is parsed as y-m-d.

To avoid potential ambiguity, it's best to use ISO 8601 (YYYY-MM-DD) dates or DateTime::createFromFormat() when possible.

Upvotes: 2

n00dl3
n00dl3

Reputation: 21564

Personnaly, I prefer the date_create_from_format that does not presume anything.

One-liner :

$StartDate = date_create_from_format( "d/m/Y" , $one )->format("Y-m-d");

Upvotes: 3

Lucas Franco
Lucas Franco

Reputation: 382

Use this to format your date:

$StartDate = date_format(date_create_from_format('d/m/Y', $one), 'Y-m-d');

To reverse:

$reverse = date('d/m/Y', strtotime($StartDate));

Upvotes: 1

Related Questions