Я пытаюсь рассчитать количество недель между двумя датами. Код ниже имеет результат 3 недель. Но на самом деле 4 недели. Почему он считает неправильно и какое решение?
Мне любопытно узнать, почему этот конкретный код не работает, но я также хотел бы знать, есть ли лучший способ сделать это.
Я использую PHP версии 7.2. Ниже приведен код, который я использую:
$HowManyWeeks = date( 'W', strtotime( 2019-04-21 23:59:00 ) ) - date( 'W', strtotime( 2019-03-25 00:00:00 ) );
Значение $HowManyWeeks должно быть равно 4, но отображается как 3.
Кроме того, когда я пробую этот код в https://phpfiddle.org/, он выдает ошибку:
Line : 2 -- syntax error, unexpected '23' (T_LNUMBER), expecting ',' or ')'
Но он отображает «3» без каких-либо ошибок при запуске на моем сервере.
Спасибо,
Тим






The value of $HowManyWeeks should be 4
Почему? обратите внимание в php неделя начать с понедельника, а я считаю в календаре ровно 3.
Если вам нужно 4 (воскресенье как первый день недели), проверьте день недели
$time1 = strtotime('2019-04-21 23:59:00');
$week1 = idate('W', $time1);
if (idate('w', $time1) == 0) # Sunday, next week
$week1++;
...
Даты, которые вы передаете в strtotime, должны быть заключены в кавычки. И правильный ответ действительно 3, так как между двумя моментами времени 3 недели, 6 дней, 23 часа и 59 минут. Попробуй это:
$HowManyWeeks = date( 'W', strtotime( '2019-04-21 23:59:00' ) ) - date( 'W', strtotime( '2019-03-25 00:00:00' ) );
echo $HowManyWeeks;
Как уже отмечалось, это будет работать только в том случае, если недели относятся к одному и тому же году. Проще использовать объекты DateTime, как в ответе @MiroslavGlamuzina, или вы можете просто разделить разницу strtotime на 604800 (секунд в неделю); затем вы можете взять floor или ceil, если требуется преобразовать в целочисленное значение:
$HowManyWeeks = (strtotime( '2019-04-21 23:59:00' ) - strtotime( '2019-03-25 00:00:00' )) / 604800;
echo $HowManyWeeks;
Выход:
3.9939484126984
Этот код будет работать только для дат в пределах данного года. Например; 1 января 2018 г. и 9 января 2017 г. разница составит всего одну неделю.
@MiroslavGlamuzina, вы абсолютно правы. Я обновился с чем-то более надежным. Но +1 тебе...
Возможный дубликат Как рассчитать разницу между двумя датами с помощью PHP?