如何操纵回溯日期并排除星期六和星期日?

时间:2016-02-15 00:05:19

标签: php

如何操纵日期并排除星期六和星期日?目标是,我需要创建一个cron作业,该作业将在5天前创建的数据上运行和执行,并且#34; BUT",星期六和星期日不应该包含在该5天内。

这是我到目前为止所拥有的

$numdays = 5;
$today = strtotime('now');
$start = date('Y-m-d',strtotime('-'.$numdays.' day',$today));
echo $start;

如果您尝试运行上面的代码段,它会显示5天前的确切日期2016-02-10。但那个人并没有排除"星期六和星期天的计算。它应该是2016-02-08。那怎么办?

2 个答案:

答案 0 :(得分:3)

你可以使用PHP的一周中的日期,有几个版本,这里有一个使用N

<?php

$current  = new DateTime();
$interval = new DateInterval('P1D');

$x = 5;
while ($x > 1) {
    // Check if day of week is not saturday/sunday (1 => Monday ... 7 -> Sunday)
    if ($current->format('N') >= 6) {
        $x++;
    }
    $current->sub($interval);
    $x--;
}

echo $current->format('Y-m-d') . PHP_EOL;

示例Run

答案 1 :(得分:-1)

您可以整整一周并放弃周末,从而保留阵列中最远的元素。

$days = array_filter(array_map(function ($daysBack) {
    $date = new \DateTimeImmutable("$daysBack days ago", new \DateTimeZone('UTC'));
    return (!in_array($date->format('N'), [6, 7])) ? $date : null;
}, Range(1, 7)));

$fiveWorkingDaysAgo = end($days);