Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 一周中与特定日期最近的一天_Php_Date_Strtotime - Fatal编程技术网

Php 一周中与特定日期最近的一天

Php 一周中与特定日期最近的一天,php,date,strtotime,Php,Date,Strtotime,我正在计算阿根廷的国家主权日,它是在最接近11月20日的星期一庆祝的 我试图在这里找到PHP解决方案,但刚找到一个Ruby解决方案: 如何为PHP实现这一点 可以尝试以下方法: <?php function getSovDay($year) { $date = new \DateTime($year."-11-20"); $weekDay = $date->format("N"); if ($weekDay == 1) { retur

我正在计算阿根廷的国家主权日,它是在最接近11月20日的星期一庆祝的

我试图在这里找到PHP解决方案,但刚找到一个Ruby解决方案:


如何为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,即大于星期四,请选择下一个星期一。如果不是,那是前一个星期一

如果
$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");

您开始用PHP编写代码了吗?如有,请出示us@RiggsFolly,不,我没有,因为我不知道在这里应用什么样的逻辑。提醒“最接近11月20日的星期一”是无关紧要的——因此,如果20日是星期四之前的星期一,那么这将是前一个星期一,如果是星期五或本周的“晚些时候”,则是下一个星期一。(当我们假设一周从周一开始,PHP的
N
date格式字符给出了该字符。)如果
$date->format(“N”)==1
,会发生什么?它在2020年不起作用,因为它返回2020-11-16,而不是2020-11-23的正确的最近的周一。然而,逻辑是好的(我相信应该大于4),所以我会接受这种方法!非常感谢。看来你是对的!我会相应地更新答案。