0

我正在与一家购物网站合作,该网站通过英国邮件交付货物,预计交付时间为 7 天。

所以我将预计交货日期设置为:

      // gives me the date 7 days into the future
      $expectedDate=Date('Y:m:d', strtotime("+7 days")); 

一切正常,直到我传递日期的英国邮件 API 返回以下错误:

[Errors] => stdClass Object
  (
      [UKMWebError] => stdClass Object
          (
              [Code] => 8200
              [Description] => Validation failed. 05/06/2012 is not a working day.
          )
   )

例如,2012 年 5 月 6 日是星期二,但我不知道这是假期。因为是假期,所以被拒绝了。

我想做的事:

  1. 确定 5-7 天范围内的预期交货日期

  2. 跳过周末

  3. 如果我在数组中有假期列表,则跳过这些日期或给我 5-7 天范围内的日期

  4. 我还想补充一件事,例如现在需要跳过的假期数组只包含这个值你能更新你的答案“05/06/2012”吗

是否可以?有人可以展示一个工作示例吗?

4

3 回答 3

2
$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++;
}
于 2012-05-29T07:23:18.687 回答
1

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

// 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 的回答非常好。可以这样简化:

$offset = date('N') < 5 ? 7 : (5 + (7 - date('N')));
$delivery_date = date('Y/m/d', "+$offset days")); 
于 2012-05-29T07:09:36.487 回答
1

以下代码将为您提供 5-7 天之间的交货日期,不包括周末

$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")); 
}
于 2012-05-29T07:15:59.903 回答