PHP日期函数中的日期格式
Hi I将值作为时间(7)存储在MSSQL数据库中 工作开始 工作结束 我正试图用php找出这两次的区别,我有以下代码PHP日期函数中的日期格式,php,sql-server,yii,Php,Sql Server,Yii,Hi I将值作为时间(7)存储在MSSQL数据库中 工作开始 工作结束 我正试图用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;
$diff = date( "h:i:s", strtotime($end) - strtotime($start) ) ;
echo $diff ;
然而,输出是
03:06:00
而不是
00:06:00
顺便问一下,差异是6分钟(360秒),有人能帮我以正确的格式保存它吗
此问题已标记为重复问题,但这是一个不同的问题,因为在使用date函数时,此问题解决了特定的时区问题。并得到了这样的回答
编辑
我标记的代码回答了我提出的问题,但是我尝试添加一个额外的计算,如下所示
$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);
请注意,总时间+时差前面有额外的数字,这可能是我的一个简单错误,但我看不出来,如果有任何帮助,我们将不胜感激。为什么不在数据库中执行此操作
SELECT TIMESTAMPDIFF(SECOND, job_start, job_end);
它速度更快,让其他人更清楚地看到您正在尝试做什么。为什么不在数据库中执行此操作
SELECT TIMESTAMPDIFF(SECOND, job_start, job_end);
它的速度更快,让其他人更清楚地看到你在做什么。首先,
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}";
首先,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}";
$end
和$start
包含什么?向我们展示一些数据示例,如$start和$end值您昨天问过同样的问题吗?如果是这样的话,你为什么还要再问一次?@sgroves很抱歉让人困惑,我只是把这个问题看作是一个单独的问题,因为我进一步了解了解决方案,这是一个更具体的PHP问题,而上一个问题更容易回答,我刚刚用这些信息更新了我的另一个问题,如果这不是事情应该做的方式,让我知道,我将删除这一个我的错,我现在看到你编辑了这一个,包括日期差异问题。最好的办法可能是从旧问题中删除您的编辑,这样这个问题就独立了(我认为如果您不这样做,任何人都不会注意到/在意)。$end
和$start
包含什么?给我们看一些数据示例,比如$start和$end值。您昨天问过同样的问题吗?如果是这样的话,你为什么还要再问一次?@sgroves很抱歉让人困惑,我只是把这个问题看作是一个单独的问题,因为我进一步了解了解决方案,这是一个更具体的PHP问题,而上一个问题更容易回答,我刚刚用这些信息更新了我的另一个问题,如果这不是事情应该做的方式,让我知道,我将删除这一个我的错,我现在看到你编辑了这一个,包括日期差异问题。最好的办法可能是从旧问题中删除您的编辑,这样这个问题就独立了(我认为如果您不这样做,任何人都不会注意/在意)。如果您运行的是5.3或更高版本,您也可以尝试date_diff功能:(没有使用这个功能,但看起来它可以完成任务)我正试图用您显示的代码执行额外的计算,在回显时,它会在时间字符串之前显示额外的数字,请查看已编辑的问题如果您希望使用日期格式来格式化小时和更小的单位(由于兼容性中断,请勿在天内使用此格式),您也可以使用gmdate('H:i:s',strotime($end)-strotime($start))
删除时区偏移量。忘记我之前的评论。问题是:strotime
仅含小时数将使用当前日期。它在$start-$end
中删除,但在strotime($total)中仍然有一次当前日期
。现在我知道了范围,应该重写整个时间计算,但是如果您将总计计算为$total=strotime($model->customer->total\u time)-strotime('00:00')
当前日期将被删除。我会将时间分成几部分,因为我知道您不是以完整日期工作,而是以小时为单位。如果您运行的是5.3或更高版本,您也可以尝试date_diff功能:(尚未使用此功能,但看起来它可以完成此任务)我正试图用您显示的代码执行额外的计算,在回显时,它会在时间字符串之前显示额外的数字,请查看已编辑的问题如果您希望使用日期格式来格式化小时和更小的单位(由于兼容性中断,请勿在天内使用此格式),您也可以使用gmdate('H:i:s',strotime($end)-strotime($start))
删除时区偏移量。忘记我之前的评论。问题是:strotime
仅含小时数将使用当前日期。它在$start-$end
中删除,但在strotime($total)中仍然有一次当前日期
。现在我知道了范围,应该重写整个时间计算,但是如果您将总计计算为$total=strotime($model->customer->total\u time)-strotime('00:00')
当前日期将被删除。我会将时间分成几段,因为我知道您没有使用完整日期,而只使用小时。如果返回解析字符串(似乎是首选)这肯定是正确的做法。但是在我看来,这里的问题只是使用date
,它返回带有时区的值。如果这返回一个解析字符串(似乎是首选)这肯定是正确的做法。但是在我看来,这里的问题只是使用date
返回带有时区的值。