So I have two form fields containing dates.
Using jQuery-UI Datepicker, I set their format do dd/mm/yy
.
I use a function that return me the days between two dates:
function getDaysBetween($date1, $date2){
$datetime1 = date_create($date1);
$datetime2 = date_create($date2);
$interval = date_diff($datetime1, $datetime2);
return $interval->days;
}
I alert the value afterwards for debugging purposes.
So, If my date is in dd/mm/yy format, php returns the following for startdate = 01/04/2016 and enddate = 03/04/2016.
If my dates are in mm/dd/yy format however, it is correctly:
Why?
You should use DateTime::createFromFormat
instead of date_create()
.
So, modify your getDaysBetween()
function like this :
function getDaysBetween($date1, $date2, $format = 'd-m-Y'){
$datetime1 = DateTime::createFromFormat($format, $date1);
$datetime2 = DateTime::createFromFormat($format, $date2);
$interval = date_diff($datetime1, $datetime2);
return $interval->days;
}
Then, you can use that function like this for dates formatted as d-m-Y
:
getDaysBetween('01-02-2016', '01-04-2016')); // -> OUTPUTS int(60)
If your input is in a format different from d-m-Y
, just pass along the format as an extra parameter.
Some examples :
getDaysBetween('3-2-2016', '15-5-2016', 'j-n-Y'); // -> OUTPUTS int(102)
getDaysBetween('9-Dec-2015', '28-Mar-2015', 'j-M-Y'); // -> OUTPUTS int(256)
getDaysBetween('15/8/24', '15/11/18', 'y/m/d'); // -> OUTPUTS int(86)
See the documentation for an overview of the supported formats.