0

私は、配送予定日が 7 日である英国の郵便で荷物を配送するショッピング サイトを利用しています。

そのため、配達予定日を次のように設定しました。

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

日付を渡した UK メール 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. もう1つ追加したいのは、たとえば今のところ、スキップする必要がある休日の配列には、この値のみが含まれているため、回答「2012年5月6日」を更新できますか

出来ますか?誰かが実例を示すことができますか??

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!';
}

アップデート:

ピナルデサイの答えはとても良いです。これは次のように簡略化できます。

$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 に答える