最接近特定日期的星期几
Closest day of week to specific date
我正在计算阿根廷的国家主权日,该日是在最接近 11 月 20 日的星期一庆祝的。
我试图在这里找到 PHP 解决方案,但只找到了 Ruby 解决方案:Get the closest date of a specific week day
如何为 PHP 实现此功能?
可以尝试这样的事情:
<?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";
}
使用 $date->format("N")
您将获得工作日的数字表示(周一至周日为 1-7)。如果它大于 4,也就是大于星期四,则 select 下一个星期一。如果不是,则为前一个星期一。
如果$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");
我正在计算阿根廷的国家主权日,该日是在最接近 11 月 20 日的星期一庆祝的。
我试图在这里找到 PHP 解决方案,但只找到了 Ruby 解决方案:Get the closest date of a specific week day
如何为 PHP 实现此功能?
可以尝试这样的事情:
<?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";
}
使用 $date->format("N")
您将获得工作日的数字表示(周一至周日为 1-7)。如果它大于 4,也就是大于星期四,则 select 下一个星期一。如果不是,则为前一个星期一。
如果$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");