Итак, у меня есть два поля формы, содержащие даты.
Используя jQuery-UI Datepicker, я установил их формат dd/mm/yy
,
Я использую функцию, которая возвращает мне дни между двумя датами:
function getDaysBetween($date1, $date2){
$datetime1 = date_create($date1);
$datetime2 = date_create($date2);
$interval = date_diff($datetime1, $datetime2);
return $interval->days;
}
Я предупреждаю значение впоследствии для целей отладки.
Итак, если моя дата в формате дд / мм / гг, php возвращает следующее для startdate = 01/04/2016 и enddate = 03/04/2016.
Если мои даты в формате мм / дд / гг, это правильно:
Зачем?
Вы должны использовать DateTime::createFromFormat
вместо date_create()
,
Итак, измените ваш getDaysBetween()
функционировать так:
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;
}
Затем вы можете использовать эту функцию для дат, отформатированных как d-m-Y
:
getDaysBetween('01-02-2016', '01-04-2016')); // -> OUTPUTS int(60)
Если ваш ввод в формате, отличном от d-m-Y
Просто передайте формат в качестве дополнительного параметра.
Некоторые примеры :
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)
Увидеть документация для обзора поддерживаемых форматов.
Вы все равно должны использовать дату «ГГГГ-ММ-ДД» в своей базе данных, чтобы вы могли сделать запрос на сортировку по дате. Так что вам просто нужно установить часовой пояс и использовать date_diff. А после, если вы хотите вывести их как MM-DD-YYYY, просто используйте
<?php
date_default_timezone_set('America/Montreal');
$date_a = new DateTime('2016-02-01');
$date_b = new DateTime('2016-04-01');
$interval = date_diff($date_a, $date_b);
echo $interval->format('%d');
echo date('m-d-Y', strtotime('2016-02-01'));