2013-03-01 93 views
1

我從數據庫中獲取這些數據。如何使用php從數據庫添加時間/持續時間

+----+------------+----------+ 
| id |  date time  | duration | 
+----+------------+----------+----------- 
| 3 | 2012-12-20 09:28:53 |  ?  | 
| 1 | 2012-12-20 19:44:10 | ?  | 
| 2 | 2012-12-23 16:25:15 |   | 
| 4 | 2012-12-23 18:26:16 |   | 
| 4 | 2012-12-24 08:01:27 |   | 
| 5 | 2012-12-29 20:57:33 |   | 
| 5 | 2012-12-29 20:57:33 |   | 
+----+------------+----------+------------ 
  • 持續時間ID #1應等於日期ID #2 - ID#1
  • 持續時間ID #2應等於日期ID #3 - ID#2

而如果id是相同的,它將被添加。

對不起,這只是在我的腦海裏,仍然很新的PHP,所以我不知道如何開始。 任何幫助表示讚賞。 謝謝

編輯按日期排序。第一條記錄的持續時間或總時間=第二條記錄 - 第一條記錄

+0

嘗試將日期轉換爲內部格式(您將看到它爲Unix時間戳或類似的東西)。以這種格式,您可以通過減去它們來以秒爲單位獲得兩個日期/時間之間的差異。 – aaaaaa123456789 2013-03-01 07:45:00

+0

我已經使用strtotime轉換,但我的問題是,因爲這是從數據庫中獲取,我怎麼能把它放在持續時間列跨ID 1,ID 2等。請指導我也許它是嵌套循環,但我仍然不知道如何去做。再次嘗試 – nicole 2013-03-01 07:50:08

+0

好吧,一旦你有這樣的時間,你只需將當前的電流減去前一個,並將它們放入表格中的相應位置。是的,你需要遍歷整個表,然後每行進行一次。 – aaaaaa123456789 2013-03-01 07:53:18

回答

0

如果我正確地理解了你,有一種叫做id=3的東西,它在「2012-12-20 09:28:53」開始,然後結束於「 2012-12-20 19:44:10「,並在同一秒id=3開始,你想知道一切都持續了多久?

我會爲所有記錄做一個循環,但我會從結尾開始(在SQL中:...ORDER BY date_time DESC),假設最後一個結束(即.開始於2012-12-29 20:57:33 )現在是,然後我計算日期的減去(開始和結束),然後我將事件作爲前一個的結尾開始,依此類推。

一個例子(未測試):

$end=now(); 
$dbh=new PDO(...); // here you need to connect to your db, see manual 
while($record=$dbh->query('SELECT id, datetime FROM table_name ORDER BY datetime DESC')->fetchObject()){ 
    $start=$record->datetime; 
    echo $duration=$end-$start; // convert $end and $start to timestamps, if necessary 
    $end=$start; // here I say that next (in sense of loop, in fact it is previous) record will end at the moment where this record started 
} 

這不總結,因爲我不知道你怎麼來存儲你的數據做的,但我認爲你將與此管理。

EDITED

在開始的時候我定義的數組:

$durations=array(); // this will hold durations 
$ids=array(); // this will hold `id`-s 
$last_id=-1; // the value that is not existent 

然後代碼如下並且代替echo我把這個:

$duration=$end-$start; 
if($last->id==$record->id){ // is this the same record as before? 
    $durations[count($durations)-1]->duration+=$duration; // if yes, add to previous value 
    } 
else { // a new id 
    $durations[]=$duration; // add new duration to array of durations 
    $ids[]=$record->id; // add new id to array of ids 
    $last_id=$record->id; // update $last_id 
    } 

然後如上$end=$start

要查看所有工期和IDS只是

for($i=0;$i<count($durations);$i++){ 
    echo 'id='.$ids[$i].', duration='.$durations[$i].'<br />'; 
    } 

注意這些表是按相反的順序。

+0

這實際上是我的問題。我不知道如何獲取數據的持續時間。我如何將以前的時間減去以後的時間。我不確定是否需要進行排列。我仍然是這個php中的新手。 – nicole 2013-03-01 10:06:26

+0

請參閱編輯版本。 – Voitcus 2013-03-01 10:29:47