「仕事の日」を見つけるためにポイントからintに逆方向に作業するのは比較的簡単ですが、「休日」を見つけることははるかに複雑で、これ以上のコードが必要になります。あなたはこの場合P1D
には、希望するどんなinterval
値減算するsub
メソッドを使用することができますDateTime
クラスを使用
は
1日です。
$strdate='04/30/2009';
$days=11;
$timezone=new DateTimeZone('Europe/London');
$interval=new DateInterval('P1D');
$start=new DateTime(date(DATE_COOKIE, strtotime($strdate)), $timezone);
$end=new DateTime(date(DATE_COOKIE, strtotime($start->format(DATE_COOKIE) . '-' . $days .' days')), $timezone);
$dates=array();
while($start->sub($interval) > $end){
/* is the day integer less than 6(sat)? */
if($start->format('N') < 6 && count($dates) < 7) $dates[]=$start->format(DATE_COOKIE);
}
echo '<pre>',print_r($dates,true),'</pre>';
この出力:
Array
(
[0] => Wednesday, 29-Apr-09 00:00:00 BST
[1] => Tuesday, 28-Apr-09 00:00:00 BST
[2] => Monday, 27-Apr-09 00:00:00 BST
[3] => Friday, 24-Apr-09 00:00:00 BST
[4] => Thursday, 23-Apr-09 00:00:00 BST
[5] => Wednesday, 22-Apr-09 00:00:00 BST
[6] => Tuesday, 21-Apr-09 00:00:00 BST
)
私はpublic api for getting public holiday情報を少し演奏をまわりましたし、一緒に次の石畳...私はこのAPIは、さまざまな国のために持っているカバレッジの種類を知りません調査の価値があるかもしれません。
別の国と地域コードはhere
$api='http://kayaposoft.com/enrico/json/v1.0/';
$params=array(
'action' => 'getPublicHolidaysForDateRange',
'fromDate' => '',
'toDate' => '',
'country' => 'eng' #England
);
$strdate='2017/12/30';
$days=7;
$timezone=new DateTimeZone('Europe/London');
$interval=new DateInterval('P1D');
$start=new DateTime(date('Y-m-d', strtotime($strdate)), $timezone);
$end=new DateTime(date('Y-m-d', strtotime($start->format('Y-m-d') . '-' . $days .' days')), $timezone);
$params['fromDate']=$end->format('d-m-Y');
$params['toDate']=$start->format('d-m-Y');
$query=http_build_query($params);
$url=$api.'?'.$query;
$json=json_decode(file_get_contents($url));
if(json_last_error() !== 0){
$json=false;
}
function isholiday($obj=false, $y=0, $m=0, $d=0){
if($obj && !empty($obj)){
foreach($obj as $item){
$date=$item->date;
if($date->day==$d && $date->month=$m && $date->year==$y) return $item->localName;
}
}
return false;
}
$dates=array();
while($start->sub($interval) > $end){
if($start->format('N') < 6 && count($dates) < $days) {
$holiday=isholiday($json, $start->format('Y'), $start->format('m'), $start->format('d'));
$date=$start->format('Y-m-d');
$dates[]=$holiday ? $date .' - '.$holiday : $date;
}
}
echo '<pre>',print_r($dates, true),'</pre>';
見つけることができますこれは、次のように出力します
Array
(
[0] => 2017-12-29
[1] => 2017-12-28
[2] => 2017-12-27
[3] => 2017-12-26 - Boxing Day
[4] => 2017-12-25 - Christmas Day
)
国によって異なるため、休日を確認する定義済みの機能はないと思います。あなたができることは、休日の日付を格納し、あなたのコードでチェックする配列を作成することです。週末の場合は、複数の例を検索して見つけることができます – hungrykoala