2012-07-13 132 views
0

我有一組銀行時間和外出時間,我想計算銀行間和外出時間之間的持續時間,並添加所有持續時間以獲得總持續時間。
例如:計算給定時間戳集合的持續時間

Array 
    (
    [1] => Array 
     (
      ['intime'] => 1342086993 
      ['outime'] => 1342087585 
     ) 

    [3] => Array 
     (
      ['intime'] => 1342087669 
      ['outtime] => 1342096165 
     ) 

    [5] => Array 
     (
      ['intime'] => 1342096339 
      ['outime'] => 1342096345 
     ) 
    ) 

$total_duration = 0; 
foreach($logArray as $log) 
{ 
    $duration = $log['outime'] - $log['intime']; 
    $total_duration += $duration; 
} 

$duration_hrs = $total_duration/3600; 
echo 'Time spend in hrs :'.$duration_hrs; 

但這不是給我適當的時間。有沒有其他辦法可以這樣做。

+0

那是''''之前''''''''''之後的目的?在我看來,像語法錯誤......還有更多類似的...... – Peon 2012-07-13 11:12:10

+0

@DainisAbols這是複製粘貼數組時發生的錯誤。 – 2012-07-13 11:15:03

回答

0

你的語法免費的腳本,工作對我來說罰款:

<?php 

    $logArray = Array (
     1 => Array (
      'intime' => 1342086993, 
      'outime' => 1342087585 
     ), 
     3 => Array (
      'intime' => 1342087669, 
      'outime' => 1342096165 
     ), 
     5 => Array (
      'intime' => 1342096339, 
      'outime' => 1342096345 
     ) 
    ); 

    $total_duration = 0; 
    foreach($logArray as $log) { 
     $duration = $log[ 'outime' ] - $log[ 'intime' ]; 
     $total_duration += $duration; 
     echo $duration/3600 . "<br />"; 
    } 

    $duration_hrs = $total_duration/3600; 
    echo 'Time spend in hrs: ' . $duration_hrs; 

?> 

而且輸出:

0.16444444444444 
2.36 
0.0016666666666667 
Time spend in hrs: 2.5261111111111 

好像你的時間格式是不正確的:13, July 2012 04:04:32 PM應該13. July 2012 04:04:32 PM

strtotime('13. July 2012 04:04:32 PM') 

工作的權利。它應該給1342195472而不是你1342168834。因此,請檢查您的時間格式是否產生錯誤microtime

+0

不知何故,我正在給一個錯誤的答案,讓我測試,並找出原因。 – 2012-07-13 11:20:23

+0

通過它是多少錢? – Peon 2012-07-13 11:22:22

+0

這裏http://codepad.viper-7.com/PoJSI8 – Peon 2012-07-13 11:37:08

0
$total_duration = 0; 
foreach($logArray as $log) 
{ 
    $duraton = $log['outtime'] - $log['intime']; 
    $total_duration += $duration; 
} 
$duration_hrs = $total_duration/3600; 
echo 'Time spend in hrs :'.$duration_hrs; 
2

使用array_map首先映射每個元素的持續時間,然後array_sum來概括他們:

$durations = array_map(function ($e) { 
    return $e['outtime'] - $e['intime']; 
}, $logArray); 
$total_duration = array_sum($durations); 
+0

會給我正確的總持續時間? – 2012-07-13 11:08:30

+0

對我而言,是的。我嘗試了10-> 15,25-> 35,100-> 150'的值,並正確得到了'65'(以秒爲單位)。 – 2012-07-13 11:15:13

+0

讓我再試一次。 – 2012-07-13 11:18:42

0

你有一個簡單的錯字在你的代碼。檢查:

duraton vs duration 

更改並將罰款。

+0

:)只是一個複製粘貼錯誤...在代碼中它會給我一個錯誤..但多數民衆贊成並非如此..從代碼 – 2012-07-13 12:56:29

+0

我可以看到,你正在減去錯誤的東西。減去$ out - $ in以獲得區間差異。 – jancha 2012-07-13 12:59:37