2013-07-30 110 views
0

您好我都存储在MSSQL数据库中值时间(7)日期格式

job_start job_end

我想用PHP来制定这两个时间之间的区别,我有如下因素代码

$start = $model->job_start; 
$end = $model->job_end; 
$diff = date("h:i:s", strtotime($end) - strtotime($start)) ; 
echo $diff ; 

但是输出是

03:06:00 

与其

00:06:00 

通过区别为6分钟(360秒)时,谁能帮助得到这个正确的格式,所以我可以将它保存的方式吗?

此问题已被标记为重复,但它是一个不同的问题,因为这解决了使用日期函数时的特定时区问题。并已被如此回答。

编辑

我已标记的代码回答,但是我问我想如下

$start = $model->job_start; 
$end = $model->job_end; 

$total = $model->customer->total_time; 
//adding time difference to total time used for that customer 
$dt = strtotime($total) + strtotime($end) - strtotime($start); 
$hours = floor($dt/3600); 
$minutes = floor($dt/60) - $hours * 60; 
$seconds = $dt - $hours * 3600 - $minutes * 60; 


// Padded values 
$hours = str_pad($hours, 2, STR_PAD_LEFT, '0'); 
$minutes = str_pad($minutes, 2, STR_PAD_LEFT, '0'); 
$seconds = str_pad($seconds, 2, STR_PAD_LEFT, '0'); 
$output = "{$hours}:{$minutes}:{$seconds}" ; 

//display 
echo '<br> Start time : '. $start; 
echo '<br> End time : '. $end; 
echo '<br> total time + time difference : '. $output; 
echo '<br> Total time for Customer : '. CHtml::encode($model->customer->total_time); 

我想补充的总时间差增加额外的计算问题到总时间变量 但是当输出回显时,我得到这个显示

Start time : 11:45:00.0000000 
End time : 12:45:00.0000000 
total time + time difference : 382015:00:00 
Total time for Customer : 09:00:00.0000000 

注意,总时间+时间差有额外的数字之前,它可能是一个简单的错误在我的部分,但我看不到它,任何帮助,将不胜感激

+3

'$ end'和'$ start'包含什么? –

+0

向我们展示一些数据示例,如$ start和$ end值 – Hackerman

+1

昨天你是否问过同样的问题?如果是这样,你为什么再问一次? – sgroves

回答

1

首先,date自Unix时代(1970-01-01 00:00:00)开始算起,所以你看到的奇怪的三小时差异就是你的时区。您需要分别解析小时,分钟和秒钟。

<?php 
$end = '2013-07-30 23:27:00'; 
$start = '2013-07-30 21:23:56'; 

$dt = strtotime($end) - strtotime($start); 
$hours = floor($dt/3600); 
$minutes = floor($dt/60) - $hours * 60; 
$seconds = $dt - $hours * 3600 - $minutes * 60; 

// Padded values 
$hours = str_pad($hours, 2, STR_PAD_LEFT, '0'); 
$minutes = str_pad($minutes, 2, STR_PAD_LEFT, '0'); 
$seconds = str_pad($seconds, 2, STR_PAD_LEFT, '0'); 

$output = "{$hours}:{$minutes}:{$seconds}"; 
+0

如果你正在运行5.3或更高版本,你也可以尝试date_diff函数:http://www.php。net/manual/en/datetime.diff.php(没有使用过,但看起来好像会完成这项工作) – sgroves

+0

工作正常,谢谢 – user1652319

+0

我想用你已经显示的代码执行额外的计算,它是在回显时间字符串前显示额外的数字,请参阅已编辑的问题 – user1652319

4

为什么在数据库中没有做到这一点

SELECT TIMESTAMPDIFF(SECOND, job_start, job_end); 

它的速度更快,其他人更清楚您正在尝试做什么。

+0

如果这返回一个解析的字符串(似乎是首选),这肯定是要走的路。然而,在我看来,这个问题只是使用'date'来返回值与时区。 – adrenalin