5

我希望获得三个工作日前的 PHP 日期。

我找到了许多通过各种文本方法获取日期的示例,但我找到的最接近的是这个,但它返回三个日期(不是一个日期,三天前),并且需要一个 get_holidays 函数,该函数的代码不是假如。

如何编写 PHP 代码以在今天前三个工作日返回?

这有效,但不考虑周/周末:

date('Y-m-d', strtotime('-3 days')); // returns 2012-12-01

这不起作用,但这是我想看到的:

date('Y-m-d', strtotime('four week days ago'));

事实上,上面的返回 '1969-12-31'。就像这样:strtotime('-4 week days')

4

5 回答 5

11

你可以一直往回走,直到你得到你想要的。我不确定这是最有效的方法,但它可以完成工作:

$count = 0
$day = strtotime('-1 day');
while ($count < 3 || date('N', $day) > 5) {
   $count++;
   $day = strtotime('-1 day', $day);
}
于 2012-12-05T00:55:47.910 回答
1

最终答案:

对于像我这样的新手来说,这是使用 Explosion Pills 答案的工作代码:

function working_days_ago($days) {
    $count = 0;
    $day = strtotime('-1 day');
    while ($count < $days || date('N', $day) > 5) {
       $count++;
       $day = strtotime('-1 day', $day);
    }
    return date('Y-m-d', $day);
}

$three_days_ago = working_days_ago('3');

奇迹般有效 !

于 2012-12-05T01:07:36.897 回答
0

我从上述函数中得到了一些意想不到的结果,所以我写了这个。参数是天数、向前 (1) 或向后 (0) 以及日期。如果没有提供日期,将使用今天的日期:

// returned $date Y/m/d
function work_days_from_date($days, $forward, $date=NULL) 
{
    if(!$date)
    {
        $date = date('Y-m-d'); // if no date given, use todays date
    }

    while ($days != 0) 
    {
        $forward == 1 ? $day = strtotime($date.' +1 day') : $day = strtotime($date.' -1 day');
        $date = date('Y-m-d',$day);
        if( date('N', strtotime($date)) <= 5) // if it's a weekday
        {
          $days--;
        }
    }
    return $date;
}
于 2013-07-15T10:50:48.800 回答
0

从今天起 3 天前:

$date = new DateTime();
$date->sub(new DateInterval('P3D'));
echo $date->format('Y-m-d') . "\n";

从特定日期起 3 天前:

$date = new DateTime('2000-01-20');
$date->sub(new DateInterval('P3D'));
echo $date->format('Y-m-d') . "\n";
于 2015-04-20T15:25:19.513 回答
-1

获取函数后的第二天↓</p>

function working_days($days){
            $day = strtotime(date('Y-m-d'));
            for ($x=0;$x<$days;$x++) {
                $day = strtotime('+1 day', $day);
                if (date('N', $day) > 6) {
                    $x = $x - 1;
                }
            }
            return date('Y-m-d',$day);
        }
       print_r( working_days(25));
    }
于 2018-08-14T11:41:06.957 回答