2015-05-21 38 views
3

我有此表在我看來爲什麼時間的減法運算返回1而不是0後迴盪

duty | exact | undertime 
12:00:00 | 12:00:00 | 01:00:00 

undertime是$hour = $duty - $exact的結果,當我

echo date("H:i:s",$hour); 

它呼應01:00 :00,我期待00:00:00這個。我錯過了什麼?

這裏是我的代碼,我使用foreach,因爲責任和確切的數據來自我的數據庫查詢。

<?php foreach($unique_date as $unique_dates):?> 
       <tr> 
        <td align="center" colspan="2"> 
         <?php echo date($unique_dates['dtr_date']);?> 
        </td> 
        <td align="center" colspan="2"> 
         <?php $timediffs = $unique_dates['timediffs']; 
          echo $timediffs; 
         ?> 
        </td> 
        <td align="center" colspan="2"> 
         <?php $exact_total_sched = $unique_dates['exact_total_sched']; 
          echo $exact_total_sched; 
         ?> 
        </td> 
        <?php       
         $duty = strtotime($timediffs); 
         $exact = strtotime($exact_total_sched); 
        ?> 
        <?php 
         if($duty < $exact) 
         { 
          echo "<td align=\"center\" colspan=\"2\">"; 
           #UNDERTIME 
           $hour1 = $exact-$duty; 
           echo date("H:i:s",$hour1); 
          echo "</td>"; 
          echo "<td align=\"center\" colspan=\"2\">"; 
          echo date("00:00:00"); 
          echo "</td>"; 
         } 
        else if($duty > $exact) 
         { 
          echo "<td align=\"center\" colspan=\"2\">"; 
          echo date("00:00:00"); 
          echo "</td>"; 
          echo "<td align=\"center\" colspan=\"2\">"; 
           #OVERTIME 
           $hour2 = $duty-$exact; 
           echo date("H:i:s",$hour2); 
          echo "</td>"; 
         } 
         else if($duty == $exact) 
         { 
          echo "<td align=\"center\" colspan=\"2\">"; 
           $hour3 = $duty-$exact; 
          echo date("H:i:s",$hour3); 
          echo "</td>"; 
          echo "<td align=\"center\" colspan=\"2\">"; 
          echo date("00:00:00"); 
          echo "</td>"; 
         } 
         ?> 
       </tr> 

       <?php endforeach ?> 
+0

難道這些值的字符串一起? unix時間戳? DateTime對象?你怎麼做減法? SHOW CODE和初始數據值爲$ duty和$ exact ....同樣,你在什麼時區?你有夏令時嗎? –

+0

我認爲問題在於時區。你在哪個時區工作 – Saty

+0

@saty - 那是我的想法:從字符串算術,'12:00:00' - '12:00:00'會轉換爲12-12給0;然後使用它作爲date()的unix時間戳將調整到定義的時區和夏令時....目前英國目前是+01:00 –

回答

0

可以使用DateTime函數date_diff

$date1=new DateTime("12:00:00"); 
$date2=new DateTime("12:00:00"); 
$diff = date_diff($date2,$date1); 
echo $diff->format('%H:%i:%s'); 
+0

當我使用你的代碼時出錯了,錯誤說「消息:類DateTime的對象不能轉換爲int」 – aintno12u

+0

@ aintno12u [檢查這個](https://eval.in/368044)它的工作 –

+0

是的,它作品。我忘了其他人,這就是爲什麼 – aintno12u

1
$duty=date_create("12:00:00"); 
$exact=date_create("12:00:00"); 
$diff=date_diff($duty,$exact); 
echo $diff->format("%H:%i:%s");die; 
+0

我不知道我是否可以做到這一點,因爲我的表中的時間是動態的。他們來自我的數據庫,所以很快就可以更改它們 – aintno12u

+0

因此,您可以將變量中的值傳遞給此方法,爲什麼不呢? –

相關問題