Ближайший день недели к определенной дате - PullRequest
0 голосов
/ 28 марта 2019

Я пытаюсь рассчитать День национального суверенитета Аргентины, который отмечается в понедельник, ближайший к 20 ноября.

Я попытался найти решения PHP здесь, но только что нашел решение для Ruby: Получить ближайшую дату определенного дня недели

Как я могу реализовать это для PHP?

Ответы [ 2 ]

2 голосов
/ 28 марта 2019

Используя $date->format("N"), вы получите числовое представление дня недели (1-7 для понедельника-воскресенья). Если значение больше 4, что больше четверга, выберите следующий понедельник. Если нет, то это предыдущий понедельник.

Если $date->format("N") === 1, это указанная дата, и нам не нужно никаких изменений.

$date = new DateTime("November 20th");
$dayOfWeek = $date->format("N");
if ($dayOfWeek > 1) {
    $date->modify($dayOfWeek > 4 ? 'next monday' : 'previous monday');
}
echo $date->format("Y-m-d");
1 голос
/ 28 марта 2019

Можно попробовать что-то вроде этого:

<?php

function getSovDay($year)
{
    $date = new \DateTime($year."-11-20");
    $weekDay = $date->format("N");
    if ($weekDay == 1)
    {
        return $date;
    } elseif ($weekDay <= 4) {
        return $date->modify("previous monday");
    } else {
        return $date->modify("next monday");
    }
}

for($i = 2000; $i <= 2200; $i++)
{
    echo getSovDay($i)->format("Y-m-d")."\n";
}
...