Advertisement
Guest User

Untitled

a guest
Jul 27th, 2016
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.56 KB | None | 0 0
  1. <?php
  2.  
  3. function calculate_hours ($array)
  4. {
  5.  
  6. $time1 = "";
  7. $time2 = "00:00:00";
  8. $time1_seconds = 0;
  9. $time2_seconds = 0;
  10. $sum_hours = 0;
  11. $sum_mins = 0;
  12. $sum_secs = 0;
  13. $is_negative = false;
  14. $type = "";
  15.  
  16. sscanf($time2, "%d:%d:%d", $hours2, $minutes2, $seconds2);
  17.  
  18. $time2_seconds = isset($seconds2)
  19. ? $hours2 * 3600 + $minutes2 * 60 + $seconds2
  20. : $hours2 * 60 + $minutes2;
  21.  
  22. foreach ($array as $time):
  23.  
  24. $type = key($time);
  25. $time1 = $time[$type] . ":00";
  26.  
  27. sscanf($time1, "%d:%d:%d", $hours1, $minutes1, $seconds1);
  28.  
  29. $time1_seconds = isset($seconds1)
  30. ? $hours1 * 3600 + $minutes1 * 60 + $seconds1
  31. : $hours1 * 60 + $minutes1;
  32.  
  33. $time2_seconds = ($type === "+")
  34. ? ($time1_seconds + $time2_seconds)
  35. : ($time2_seconds - $time1_seconds);
  36.  
  37. endforeach;
  38.  
  39. $is_negative = ($time2_seconds < 0)
  40. ? true
  41. : false;
  42.  
  43. $sum_hours = ($is_negative === true)
  44. ? ceil($time2_seconds / 3600)
  45. : floor($time2_seconds / 3600);
  46.  
  47. $sum_mins = ($is_negative === true)
  48. ? ceil($time2_seconds / 60 % 60)
  49. : floor($time2_seconds / 60 % 60);
  50.  
  51. $sum_secs = ($is_negative === true)
  52. ? ceil($time2_seconds % 60)
  53. : floor($time2_seconds % 60);
  54.  
  55. $sum_hours = str_pad(abs($sum_hours), 2, "0", STR_PAD_LEFT);
  56. $sum_mins = str_pad(abs($sum_mins), 2, "0", STR_PAD_LEFT);
  57. $sum_secs = str_pad(abs($sum_secs), 2, "0", STR_PAD_LEFT);
  58.  
  59. $time2 = ($is_negative)
  60. ? "-{$sum_hours}:{$sum_mins}"
  61. : "+{$sum_hours}:{$sum_mins}";
  62.  
  63. return $time2;
  64.  
  65. }
  66.  
  67. echo calculate_hours (array
  68. (
  69. array
  70. (
  71. "+" => "10:00"
  72. ),
  73. array
  74. (
  75. "-" => "05:45"
  76. ),
  77. array
  78. (
  79. "+" => "00:01"
  80. ),
  81. ));
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement