PHP date_create / date_diff работает только с американским форматом даты?

Итак, у меня есть два поля формы, содержащие даты.

Используя 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.

введите описание изображения здесь

Если мои даты в формате мм / дд / гг, это правильно:

введите описание изображения здесь

Зачем?

0

Решение

Вы должны использовать 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)

Увидеть документация для обзора поддерживаемых форматов.

2

Другие решения

Вы все равно должны использовать дату «ГГГГ-ММ-ДД» в своей базе данных, чтобы вы могли сделать запрос на сортировку по дате. Так что вам просто нужно установить часовой пояс и использовать 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'));
0

По вопросам рекламы [email protected]