PHP - расчет количества недель между двумя датами

Я пытаюсь рассчитать количество недель между двумя датами. Код ниже имеет результат 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» без каких-либо ошибок при запуске на моем сервере.

Спасибо,

Тим

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
1
3 067
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вы можете использовать DateTime() для этого:

$date1 = new DateTime('2017-04-30');
$date2 = new DateTime('2019-04-30');
// I have left the remainer. You may need to round up/down. 
$differenceInWeeks = $date1->diff($date2)->days / 7;
print_r($differenceInWeeks);

Надеюсь это поможет,

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

Демо на 3v4l.org

Этот код будет работать только для дат в пределах данного года. Например; 1 января 2018 г. и 9 января 2017 г. разница составит всего одну неделю.

Miroslav Glamuzina 30.04.2019 06:22

@MiroslavGlamuzina, вы абсолютно правы. Я обновился с чем-то более надежным. Но +1 тебе...

Nick 30.04.2019 10:44

Другие вопросы по теме