如果我正確地理解了你,有一種叫做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 />';
}
注意這些表是按相反的順序。
嘗試將日期轉換爲內部格式(您將看到它爲Unix時間戳或類似的東西)。以這種格式,您可以通過減去它們來以秒爲單位獲得兩個日期/時間之間的差異。 – aaaaaa123456789 2013-03-01 07:45:00
我已經使用strtotime轉換,但我的問題是,因爲這是從數據庫中獲取,我怎麼能把它放在持續時間列跨ID 1,ID 2等。請指導我也許它是嵌套循環,但我仍然不知道如何去做。再次嘗試 – nicole 2013-03-01 07:50:08
好吧,一旦你有這樣的時間,你只需將當前的電流減去前一個,並將它們放入表格中的相應位置。是的,你需要遍歷整個表,然後每行進行一次。 – aaaaaa123456789 2013-03-01 07:53:18