2014-05-23 133 views
2

我試着去解決這個問題,因爲兩天沒有成功... 首先我所有代碼:PHP //轉換/計算日期

PHP的版本:5.4

SCRIPT1:

query = "SELECT start, end FROM timetable WHERE ........"; 
$result = mysql_query($query, $db) or die(mysql_error()); 
$sqlarr = mysql_fetch_array($result, MYSQL_ASSOC); 
$times = array($sqlarr['start'], $sqlarr['end']); 

$calced = strtotime($times[1]) - strtotime($times[0]); 
$total = date("H:i:s", $calced-3600);   //<-- -3600 Fixed it 
echo "<br>Total: ".$total; 

開始和結束時間格式爲00:00:00。每次這個腳本計算它附加1小時的結果。所以如果我要5分鐘的結果,我會得到01:00:05。 爲什麼?

這一個更奇怪。 SCRIPT2:

while($row = mysql_fetch_array($result, MYSQL_ASSOC)){ 
    echo " | ".$row['total']."<br>"; 
    $add += strtotime($row['total']);} 

echo $add; 

第一個腳本計算從開始到結束的總時間。第二個應該得到數據庫的總時間,並計算所有條目的總和。對於每個條目,第二個腳本減去2個小時。

示例: 數據庫=>開始=十二點32分00秒結束= 12時32分十五秒

SCRIPT1結果1 =一點00分15秒(其中這種額外小時來自?)固定

每個Result1都存儲在同一個表(db)中。 Script2正在加載所有這些行並通過while循環來處理它們。

根據腳本有多少條目減去了服務小時數。
0只=>總計:00:00:00
1項=>總計:23:00:XX
2個條目=>總計:20:00:XX
3條目=>總計:18:00 :xx
4條目=>總計:16:00:xx
因此,有2個條目,它繼續從每個總計算中減去2個小時,這是不正確的,很明顯。

感謝你們。使用DateTime使這個簡單和無bug!

+0

所以我沒有真正明白,* 00:00:05 + 00:00:05 = 22:00:10 *,在這個例子中,** start **和** end **是什麼?所以start = 00:00:10和end = 22:00:10? – Artemkller545

+0

生病編輯我的第一篇文章,讓它更清楚一點。 – C4u

回答

2

我沒有真正使用strtotime功能確保您的情況,但我試過這個解決方案,它的工作,如果您對PHP> 5.2

您可以使用DateTime類和date_diff函數來獲得差異日期,在這裏閱讀更多:http://us3.php.net/manual/en/datetime.diff.php

例子:

// start date 
$start = new DateTime("09:23:38"); 
// end date 
$end = new DateTime("09:23:54"); 

// calculate difference 
$calc = date_diff($start, $end); 

// prints 00:00:16 
echo $calc->format('%h:%i:%s'); 

所述的T Øthis answer好像從1:00:00默認的日期開始,所以你可以用3600秒(1小時),這樣減去你的約會:

$start = strtotime("11:23:38"); 
$end = strtotime("11:23:54"); 

$calc = $end - $start; 
echo date('H:i:s', $calc - 3600); 
+0

我是一個轉換和計算日期和時間的新手。我在一個測試頁上試了這個。現在工作。我得到0:0:x。是否有可能把這個變成00:00:xx? – C4u

+0

閱讀我的答案編輯。 – Artemkller545

+0

好的。 -3600固定我的第一個問題。現在還有第二個。 「總次數」一起存儲在1個表格中。第二個腳本加載所有條目並使它們變爲sumarizes。對於我表格中的每個條目,最終結果都會被替換2個小時。我希望你明白我的意思。 – C4u

0

的問題來自:

echo date('H:i:s', $calc); 

$start - $end給你預期值以秒爲單位。這取決於date('H:i:s', 0)是什麼值。在我的電腦上,1月1日不是午夜。 1970年! 此鏈接爲例:http://sandbox.onlinephpfunctions.com/code/81e56cbce16f6dacfedd2cb376b946a540bce36d

您可能會考慮從您的結果中減去date('H:i:s', 0)以獲得正確的值。

或者使用DateTime作爲@Ben Beri建議你照原樣做(我認爲)最好的方法。

+0

不好備份我的東西,並編輯我的代碼到DateTime。謝謝。 – C4u