2014-03-26 68 views
0

我正在處理一個項目,而我處於這種情況之前:在特定條件下遞增日期

我解析文件並獲取值以填充數據庫。

我的文件可以恢復這樣的:

xxxxxxx date=2014-04-26 xxxxxx (the first line) 
Action1 xxxxxx time=12:00:00 
Action2 xxxxxx time=12:05:00 

我的MySQL表:

Action varchar 
Time Datetime 

我將獲得一個新的文件每5分鐘保存操作和日期時間(我需要使用來自第一行的日期)在我的表格中。

所以可能出現的問題是這樣的一個:

xxxxxxx date=2014-04-26 xxxxxx (the first line) 
Action1 xxxxxx time=23:57:00 
Action2 xxxxxx time=00:02:00 

事實上,在00:00:02的日期將是不正確的。

但下一次會好起來的,因爲我將有:

xxxxxxx date=2014-04-27 xxxxxx (the first line) 
Action1 xxxxxx time=00:02:00 
Action2 xxxxxx time=00:07:00 

有人有什麼我可以做些什麼來解決這種情況的想法?

在此先感謝

PS:我編碼PHP

+0

對不起,目前還不清楚。究竟是什麼問題?比較時間來查看結束時間是否在開始時間之前有問題嗎?這也是在MySQL或PHP本身完成嗎?請包含一些您的代碼。 – Shawn

+0

你的文件是一個文本文件? – iamsleepy

+0

是的,它是一個文本文件。我將編輯我的帖子以作出更好的解釋 – musecz

回答

1

你幾乎必須要保證'time='值按升序排列,並且該文件在第二行(與'time=')實際上是上一行'date='中表示的日期值的時間。


我想接近它是這樣的:

從具有'date='行,請保留值(變量),所以當你處理下一行是可用的。

在下一行上,使用當前行中保存的'date='值和'time=',併合並那些行以爲該行創建DATEIME。保存'date=''time='組件值(在變量中),以便在處理文件中的下一行時可使用這些值。

當您處理下一行,計算'date='行和前一行(保存在變量)與從當前(新)線'time='值沿着相同'date=''time='之間的持續時間。

如果持續時間大於或等於零,則假定它是同一日期。 (使用保存的'date='值和新'time='值來創建分配給該記錄的日期時間。)

如果持續時間小於零(負),那麼你可以假設'date='部分已經滾存至下一一天,因此將保存的價值增加一天。將新增加的'date='值與該行的'time='值合併,以創建要分配給該記錄的DATETIME。

爲每個後續行重複該操作,保存分配給該行的DATETIME的'date=''time='組件。計算持續時間,任何時候出現負數,將保存的'date='值增加1.

這就是我要使用的方法。 (我認爲你可能需要重置'time='保存變量,當你遇到文件中的下一行'date='行時,將其設置爲00:00:00,因此計算持續時間將爲正值)

在一個更普遍的問題中,有一個持續時間超過24小時的角落案例,但沒有從文件中顯示的數據中檢測到這種情況的好方法。