2015-04-08 4 views
1

Я думаю, что объект Time - это просто беспорядок. Я действительно никогда не узнаю, как они работают.
У меня есть массив с данными: 09: 00-09: 20 и 12: 30-13: 00.
Теперь я хотел бы рассчитать время между 09: 00-09: 20.
Так я разбить массив:
DateTime "diff"

$break_1_dur = $usr_breaks['skift_rast1']; 
//returns: 09:00-09:20 

Я разбить строку:

$break_1_start = substr($break_1_dur,0,5); 
//returns: 09:00     

$break_1_ends = substr($break_1_dur,6,5); 
//returns: 09:20 

А теперь я буду использовать DateTime диф для расчета времени:

$break_1_dur = $break_1_start->diff($break_1_ends); 

Я попытался сделать строки «DateTime» с:

$break_1_start = new DateTime(); 

Как я могу легко вычислить это?

ответ

3

Это должно работать для вас:

Здесь я первый разделить ваш массив в следующую структуру с array_map():

Array 
(
    [skift_rast1] => Array 
     (
      [start] => 09:00 
      [end] => 09:20 
     ) 

    [skift_rast2] => Array 
     (
      [start] => 12:30 
      [end] => 13:00 
     ) 

) 

Петля Я через все $times и вычислить разницу с созданием DateTime объектов и получить разница с помощью diff():

<?php 

    $usr_breaks = ["skift_rast1" => "09:00-09:20", "skift_rast2" => "12:30-13:00"]; 
    $times = array_map(function($v){ 
     return array_combine(["start", "end"], explode("-", $v)); 
    }, $usr_breaks); 


    //print differences 
    foreach($times as $time) { 
     $timeOne = new DateTime($time["start"]); 
     $timeTwo = new DateTime($time["end"]); 
     $interval = $timeOne->diff($timeTwo); 
     echo sprintf("%d hours %d minutes<br>", $interval->h , $interval->i); 
    } 

?> 

выход:

0 hours 20 minutes 
0 hours 30 minutes 
+0

Ничего себе, спасибо! –

+0

@Mjukis Добро пожаловать! Надеюсь, что я сделал класс DateTime немного понятным и используемым для вас: D (Это не так сложно) – Rizier123

Смежные вопросы