2015-03-02 3 views
-1

Я создал функцию, чтобы выработать количество дней, а затем недель между двумя датами, в приведенном ниже примере есть 35 дней, что составляет ровно 5 недель, однако функция возвращается совсем не так на 4.8571428571429 - подразделение убивает остаток и выходите на 4.Исправить количество дней/недель между 2 днями?

Я мог бы использовать функцию ceil для округления до 5, но разве это безопасный метод для всех дат? или есть лучший способ сделать это?

$date1 = new DateTime('2015-02-23'); 
    $date2 = new DateTime('2015-03-29'); 

    $diff = $date2->diff($date1)->format("%a"); 

    $weeks = $diff/7; 

    return $weeks; 
+0

Для округления: 'round (" 4.8571428571429 ", 0, PHP_ROUND_HALF_UP);' –

+0

Это, вероятно, связано с идеей инклюзивного/эксклюзивного диапазона. Ответ, который вы получаете, на самом деле составляет 34/7. Значение diff() не включает ограничительную дату на одном конце. – dan08

+0

try Round [ссылка] http://php.net/round –

ответ

1

Добавить один день до $ date2

$date1 = new DateTime('2015-02-23'); 
$date2 = new DateTime('2015-03-29'); 
$date2->add(new DateInterval('P1D')); 

$diff = $date2->diff($date1)->format("%a"); 

$weeks = $diff/7; 

return $weeks; 

Тем не менее, до сих пор не имеет целый ряд различий недель с оригинальной датой

+0

Похоже, у него есть ответный DV, поэтому +1. – halfer

3
$date2->add(new DateInterval('P1D')); 

Используйте эту линию после того, как ваша инициализация $ date2.

Зачем это работает? Если вы считаете, у вас есть 34 дня: ОТ 23-02 0:00 ДО 29-03 0:00.

Если вы хотите посчитать этот последний день также (чтобы иметь 35 дней), вам нужно добавить дополнительный день.

+0

Спасибо, кажется, работает, но все еще запутано, что я считаю неправильным, с 23-го февраля до 29-го марта я считаю ровно 5 недель, что составляет 35 дней. – Goodbytes

+0

Вы рассчитываете с полуночи до полуночи. Если вы рассчитываете с понедельника до вторника, у вас будет 1 день, потому что вы только рассчитывали до начала вторника, а не до конца. Поэтому последний день (воскресенье 29 марта) не включен, поэтому вам нужно добавить дополнительный день. – Blaatpraat

+0

Спасибо за объяснение – Goodbytes

Смежные вопросы