2017-01-02 7 views
0

Hallo Ich versuche Array zu generieren, die alle Tage eines jeden Monats berechnet und dann die Wochenenden subtrahieren, und danach möchte ich 8 Stunden für jeden Tag hinzufügen, also 1 = 8, 2 = 16 usw. Bisher konnte ich das Array mit allen Tagen eines bestimmten Monats generieren. Versuchen, die Wochenenden zu subtrahieren und 8 Stunden für jeden Tag hinzuzufügen, aber bisher kein Glück.Generieren Array von Arbeitstagen mit Arbeitsstunden für jeden Tag

Hier ist mein Code:

<?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>"; 
        ?> 

Also das Endergebnis sollte wie folgt sein:

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

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

) 

Grundsätzlich ist das Ziel ist es, jeden Arbeitstag zu berechnen, wie viele Stunden sollte für einen Monat enthält. Nachdem Sie diese Informationen erhalten haben, können Sie sie mit dem heutigen Datum vergleichen und sehen, ob die Arbeitszeiten für diesen Monat abgeschlossen sind oder nicht.

Jede Hilfe ist sehr willkommen.

+0

Ich bin sicher, es ist nur ein Tippfehler, aber Ihre if-Anweisung sollte einen Fehler auslösen. –

+0

ja es wirft Fehler in der Zeile von && ((Datum ('d')! = 'Sat' || (Datum ('d')! = 'Sonne') –

+1

Ich ging eigentlich für die Tatsache, dass es aussieht Ihre fehlenden '))' von dem Ende davon. –

Antwort

1

Eine Möglichkeit, die Sie erreichen können, was Ihr nach ist DateTime zu verwenden, den Überblick über die aktuellen Stand zu halten:

$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'); 
} 

Dies ist, was los ist:

  1. die DateTime Set der Anfang zu sein des Monats.
  2. foreach (Bereich (...)) s nur eine andere Möglichkeit zu schreiben for($i=1;$i<=$date->format('t');$i++). t gibt Ihnen nur die Tage im Monat.
  3. $date->format('N') < 6 ist zu überprüfen, ob der Wochentag vor Samstag ist. Wenn ja, erhöhen Sie die $hours Zählung um 8.
  4. Ich denke, der Rest ist ziemlich einfach.

Hoffe, das hilft!

+0

Ausgezeichnet, vielen Dank! –

+0

@JohnSiniger Schön, dass ich helfen konnte! –

Verwandte Themen