2017-03-18 2 views
0

Ich habe eine Liste von Stunden auf diese Weise organisiert:Wie Zeitbereiche in PHP definieren?

Array (
    [0] => Array (
     [0] => 08:30 
     [1] => 09:00 
     [2] => 09:30 
     [3] => 10:00 
     [4] => 14:30 
     [5] => 15:00 
     [6] => 15:30 
     [7] => 16:00 
     [8] => 16:30 
    ) 
    [1] => Array (
     [0] => 13:30 
     [1] => 14:00 
     [2] => 14:30 
     [3] => 18:00 
     [4] => 18:30 
     [5] => 19:00 
    ) 
) 

und ich versuche, sie in dieses Format zu transformieren:

'0': [['08:30','10:00'], ['14:30', '16:30']], 
'1': [['13:30','14:30'], ['18:00', '19:00']] 

, dass eine jQuery-Plugin verwendet (Day Schedule Selector).

Wenn der Zeitunterschied größer als: 30 Minuten ist, wird der Bereich zwischen eckigen Klammern eingeschlossen.

Ich konnte keine Lösung in PHP für so etwas finden. Hier

ist, was ich versucht habe:

$prepared = ''; 
foreach($serialized as $day=>$hours) { 
    $prepared_hours = array(); 
    foreach($hours as $hour) { 
     $prepared_hours[] = "['". $hour ."']"; 
    } 
    $prepared .= "'{$day}' : [". implode(',', $prepared_hours) ."],\n"; 
} 

Aber das Ergebnis war:

'0' : [['08:30'],['09:00'],['09:30'],['10:00'],['14:30'],['15:00']‌​,['15:30'],['16:00']‌​,['16:30']], 
'1' : [['13:30'],['14:00'],['14:30'],['18:00'],['18:30'],['19:00'] 

Ich konnte nicht definieren die Zeitbereiche: ['08: 30' , '10: 00 '], [' ..

Ich schätze wirklich jede Hilfe.

Vielen Dank.

Antwort

-1

Vielleicht bekommt man begonnen:

$start = new \DateTime('9:00'); 
$end = new \DateTime('14:00'); 
$period = new \DatePeriod($start,new \DateInterval('PT30M'),$end); 

foreach ($period as $date) { 
    print $date->format('H:i') . '<br>'; 
} 
+0

Dies ist kein Arbeits/nützliche Antwort. – mickmackusa

+0

Diese Antwort sollte ein Kommentar sein – mickmackusa

2

Dieses es für Sie tun (Demo):

$array=array (
    0 => array (
     0 => "08:30", 
     1 => "09:00", 
     2 => "09:30", 
     3 => "10:00", 
     4 => "14:30", 
     5 => "15:00", 
     6 => "15:30", 
     7 => "16:00", 
     8 => "16:30" 
    ), 
    1 => array (
     0 => "13:30", 
     1 => "14:00", 
     2 => "14:30", 
     3 => "18:00", 
     4 => "18:30", 
     5 => "19:00" 
    ) 
); 
foreach($array as $index=>$times){ 
    $prev=""; 
    $x=-1; 
    foreach($times as $time){ 
     if(!$prev || $time!=date("H:i",strtotime("+30 minutes $prev"))){ 
      ++$x; 
      $result[$index][$x]=array($time,$time); // store new time as start & end 
     }else{ 
      $result[$index][$x][1]=$time; // update end time 
     } 
     $prev=$time; 
    } 
} 
echo "<pre>"; 
var_export($result); 
echo "</pre>"; 

Ausgang wie gewünscht ist:

array (
    0 => 
    array (
    0 => 
    array (
     0 => '08:30', 
     1 => '10:00', 
    ), 
    1 => 
    array (
     0 => '14:30', 
     1 => '16:30', 
    ), 
), 
    1 => 
    array (
    0 => 
    array (
     0 => '13:30', 
     1 => '14:30', 
    ), 
    1 => 
    array (
     0 => '18:00', 
     1 => '19:00', 
    ), 
), 
) 
+0

* Hinweis: meine Antwort wird schlecht behandeln Mitternacht geschrieben als '24: 00' für die richtige Handhabung verwenden Sie 00: 00' für Mitternacht. – mickmackusa

+0

@SorinHaidau Wenn meine Antwort Ihr Problem ausreichend löst, vergeben Sie bitte das grüne Häkchen, damit Ihre Frage aus der unbeantworteten Fragenliste entfernt wird und zukünftige Leser nicht versuchen, ein gelöstes Problem zu lösen. – mickmackusa

Verwandte Themen