2017-06-21 7 views
1

Ich habe darüber debattiert, ob ich Date-Funktionen verwenden soll oder ob es eine einfachere Möglichkeit gibt, ein Array mit den Minuten eines bestimmten Tages zu erstellen.Richtiger Weg, um einen Zeitplan zu erstellen

function emptySchedule() 
    { 
     $emptySchedule = []; 
     for ($h = 0; $h < 24; ++$h) { 
      for ($m = 0; $m < 60; ++$m) { 
       $emptySchedule[str_pad($h, 2, '0', STR_PAD_LEFT).':'.str_pad($m, 2, '0', STR_PAD_LEFT)] = []; 
      } 
     } 

     return $emptySchedule; 
    } 

Aber es fühlt sich einfach schmutzig, gibt es einen besseren Weg, um das gleiche Ergebnis oder vielleicht eine bessere Art und Weise zu handhaben die Minuten am Tag mit einem Date-Objekt oder noch besser akzeptiert ein global zu erreichen korrekte Weg? Ich würde es vorziehen, kein Paket zu benutzen, aber wenn es ein gutes gibt, bin ich dafür offen.

BEARBEITEN; In irgendeinem Zusammenhang werde ich Arrays in jede Minute des Tages einfügen.

EDIT2: für den Zweck dessen, was für diese verwendet werden wird, ist keine Eingabe erforderlich, meine letzte Funktion war;

public function emptySchedule() 
{ 
    $startDate = date_create("today"); //Any start date works 
    $endDate = date_create("tomorrow"); //Any end date works 
    $step = new \DateInterval("PT1M"); //1 minute, can change 
    $date = $startDate; 
    $times = []; 
    while ($date <= $endDate) { 
     $times[$date->format("H:i")] = []; 
     $date = $date->add($step); 
    } 

    return $times; 
} 
+1

Nicht alle Tage haben 24 Stunden ...! Aus diesem Grund sollten Sie nur Datumsfunktionen verwenden. – deceze

+0

Ah Sommerzeit ist mir nicht eingefallen, ich bin völlig verloren, wie ich das Problem lösen könnte, vielleicht brauche ich einen frischen Morgen mit meinem Kaffee, ich bin in der letzten Stunde bei der Arbeit so ziemlich müde! ! –

+0

Robert, zeigen Sie uns bitte ein Beispiel für wünschenswert Ausgang, um mit der Lösung zu helfen, bitte. – calexandre

Antwort

1

Nun, ein eleganter Ansatz des Codes ist:

<?php 
function emptySchedule($hoursInit = date('G'), $hoursActive = 24) 
    { 
     $emptySchedule = []; 
     for ($h = $hoursInit; $h < $hoursActive; ++$h) { 
      for ($m = 0; $m < 60; ++$m) { 
      $emptySchedule[sprintf('%02d:%02d', $h, $m)] = []; 
      } 
     } 

     return $emptySchedule; 
} 

Sie Intervall verwenden, mit Mittagessen in Ihrem Zeitplan und Sachen arbeiten:

<?php 
function emptySchedule($hoursInit = date('G'), $hoursActive = 24, $interval = false) 
    { 
     $emptySchedule = []; 
     for ($h = $hoursInit; $h < $hoursActive; ++$h) { 
      if ($interval && ($h < $interval['start'] || $h > $interval['end'])) { 
       for ($m = 0; $m < 60; ++$m) { 
       $emptySchedule[sprintf('%02d:%02d', $h, $m)] = []; 
       } 
      } 

     } 

     return $emptySchedule; 
} 

Aber, wie @deceze sagte, die Verwendung von Datumsfunktionen ist ein Muss, es ist nicht einfach, jetzt zu tun, ich werde versuchen, einen besseren Weg zu finden;

+1

Ich denke, eine Kombination aus Ihrer Antwort und der unten ist wahrscheinlich die "saubere" Herangehensweise Ich suche, Schande, ich kann 2 Antworten nicht akzeptieren :(! –

Verwandte Themen