PHP日期函数中的日期格式

时间:2013-07-30 20:23:58

标签: php sql-server yii

您好我将值存储在MSSQL数据库中作为time(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

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

2 个答案:

答案 0 :(得分:4)

为什么不在数据库中执行此操作

SELECT TIMESTAMPDIFF(SECOND, job_start, job_end);

它更快,其他人更清楚地看到你想要做什么。

答案 1 :(得分: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}";