首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在5-7天内找到下一个营业日期,在php中跳过周末还是非工作日?

在5-7天内找到下一个营业日期,在php中跳过周末还是非工作日?
EN

Stack Overflow用户
提问于 2012-05-29 06:53:49
回答 3查看 1.1K关注 0票数 0

我正在与一个购物网站工作,通过英国邮件交付托运货物,预计送货时间为7天。

因此,我已将预期交货日期定为:

代码语言:javascript
运行
复制
      // gives me the date 7 days into the future
      $expectedDate=Date('Y:m:d', strtotime("+7 days")); 

在我向其传递日期的英国邮件API返回以下错误之前,一切正常:

代码语言:javascript
运行
复制
[Errors] => stdClass Object
  (
      [UKMWebError] => stdClass Object
          (
              [Code] => 8200
              [Description] => Validation failed. 05/06/2012 is not a working day.
          )
   )

例如,05/06/2012是一个星期二,但我不知道这是一个假期。因为是假日,所以被拒绝了。

我想做的是:

"05/06/2012"

  • 在5-7天的范围内确定预期的交付日期,这将跳过周末的

  • ,如果在数组中有假日列表,则可以跳过这些日期或在5-7天的

  • 范围内给出日期,例如,现在需要跳过的假日数组只包含此值,您可以更新您的答案(

)。

有可能吗?有人能举个例子吗??

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-05-29 07:15:59

以下代码显示,除周末外,交货日期为5-7天。

代码语言:javascript
运行
复制
$working_day    = date('N');

if($working_day < 5)
{
    $delivery_date = date('Y/m/d', strtotime("+7 days")); 
}
else
{
    if($working_day == 6)
        $delivery_date = date('Y/m/d', strtotime("+6 days")); 
    if($working_day == 7)
        $delivery_date = date('Y/m/d', strtotime("+5 days")); 
}
票数 1
EN

Stack Overflow用户

发布于 2012-05-29 07:23:18

代码语言:javascript
运行
复制
$holidays = array('05/06/12');

$deliverable_days = 1;
$any_day = 1;

while($deliverable_days<=7)
{

 $ts= strtotime("+{$any_day} days");
 $this_date = date('d/m/Y',$ts);
 $this_day = date('w',$ts);

 if(!in_array($this_date,$holidays) && !in_array($this_day,array(0,6)))
 {
  $deliverable_days++;
 }
 if($deliverable_days==7)
 {
   break;
 }
 $any_day++;
}
票数 2
EN

Stack Overflow用户

发布于 2012-05-29 07:09:36

这不会解决您的问题,但是您可以使用它来检查周末、假日或工作日的未来日期:

代码语言:javascript
运行
复制
// M/d/Y 
$holidays = array(
    '05/06/2012',
    '10/07/2012',
);

$expectedDate = strtotime("+7 days"); 

if (in_array(date('l', $expectedDate), array('Saturday', 'Sunday'))) {
    echo 'weekend';
} else if (in_array(date('m/d/Y', $expectedDate), $holidays)) {
    echo 'holiday';
} else {
    echo date('Y:m:d', $expectedDate) . ' is working day!';
}

更新:

Pinaldesai的回答很好。它可以简化如下:

代码语言:javascript
运行
复制
$offset = date('N') < 5 ? 7 : (5 + (7 - date('N')));
$delivery_date = date('Y/m/d', "+$offset days")); 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10794413

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档