如何操纵日期并排除星期六和星期日?目标是,我需要创建一个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
。那怎么办?
答案 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);