2017-01-02 9 views
0

こんにちは私は毎月のすべての日を計算し、週末を減算する配列を生成しようとしています。その後、毎日8時間を追加したいので、1 = 8,2 = 16など。これまで私は特定の月のすべての日で配列を生成することができました。週末を差し引いて、毎日8時間を追加しようとしていますが、これまでのところ運がありません。ここで毎日勤務時間の平日の配列を生成

は私のコードです:

<?php 
         $list=array(); 
         $month = 1; 
         $year = 2017; 

         for($d=1; $d<=31; $d++) 
         { 
          $time=mktime(12, 0, 0, $month, $d, $year);   
          if (date('m', $time)==$month && ((date('D', $time) != 'Sat' || (date('D', $time) != 'Sun'))))  

           $list[]=date('d', $time); 
         } 

         echo "<pre>"; 
         print_r($list); 
         echo "</pre>"; 
        ?> 

ので、最終的な結果は次のようなものでなければなりません:

Array 
(
    [0][0] => 01 
    [0][1] => 8 

    [1][0] => 02 
    [1][1] => 16 
    ... 

) 

基本的な目標がすべきは月のために含まれているどのように多くの時間ずつ勤務時間を計算することです。この情報を入手した後、今日の日付と比較して、今月の勤務時間が完了したかどうかを確認することができます。

どのようなヘルプも大歓迎です。あなたの後の日付を追跡するためにDateTimeを使用することです何を達成できる

+0

私はそれが単なる誤植であると確信していますが、if文はエラーを投げます。 –

+0

yes &&(( 'd')!= 'Sat' ||(date( 'd')!= 'Sun') –

+1

私は実際には、あなたの欠けている '))'の最後から。 –

答えて

1

一つの方法:

$year = 2017; 
$month = 1; 

$date = (new Datetime())->setDate($year, $month, 1); 

$days = []; 
$hours = 0; 

foreach (range(1, $date->format('t')) as $i) { 

    $hours += $date->format('N') < 6 ? 8 : 0; 

    $days[] = [ 
     'date' => $date->format('d'), 
     'hours' => $hours, 
    ]; 

    $date->modify('+1 day'); 
} 

これは何が起こっているかである:

DateTimeは最初になるように設定
  1. 今月の。
  2. foreach(range(...))は、別の方法ではfor($i=1;$i<=$date->format('t');$i++)と書くことができます。 tはあなたに月の日数を与えます。
  3. $date->format('N') < 6土曜日の前の曜日であることを確認します。もしそうなら、$hoursを8だけ増分してください。
  4. 残りはかなり簡単だと思います。

希望します。

+0

優秀、ありがとう! –

+0

@JohnSiniger喜んで私は助けることができました! –

関連する問題