比较时间范围并计算时差

时间:2013-06-19 06:41:36

标签: php mysql time

我想确定给定的日期时间值是否在时间范围内,然后在数据库中插入$ actual_dateOut和$ range_dateOut之间的时差。

数据示例:

$actual_dateIn  = "2013-06-01 06:54:00" 
$actual_dateOut = "2013-06-01 19:20:00"

$range_dateIn     = "08:00:00"
$range_dateOut    = "18:00:00"

这是我到目前为止所做的事情:

 date_default_timezone_set("UTC");
 $dateIn  =  date($actual_dateIn, time());
 $dateOut =  date($actual_dateOut, time());


 if($dateIn <= strtotime($range_dateIn) && $dateOut <= strtotime($range_dateOut))
 {
    $ot = $range_dateOut->diff($strtotime($actual_dateOut));
    $hours = $ot->h;


    $sql_insert = "INSERT INTO tbl_ot (id, fDate, shiftCode, ot ) 
                   VALUES ('$id', '$actual_dateIn', '$shift', '$hours')";

    $result_ot = mysql_query($sql_insert);  
 }

但它没有计算$ actual_dateOut和$ range_dateOut之间的差异。

2 个答案:

答案 0 :(得分:0)

好吧有一些问题

1)date()函数接受日期格式和可选的unix时间戳的输入。你正在过日期。

2)你的if()条件是将非数字字符串与strtotime()返回的整数进行比较。

3)Date返回一个字符串,而不是一个对象,你将在非对象上调用diff()方法致命。

4)你需要在$ strtotime之前移除$($ actual_dateOut)

所有这一切......我会继续将所有4转换为unix时间戳。 日期时间运行strtotime()。对于范围值,在冒号上爆炸,更新每个索引的值。将索引0乘以3600,将索引1乘以60,然后单独留下第三个。然后对爆炸数组的变量运行array_sum()。

此时,您可以对变量使用简单比较,然后减去以找出差异。

答案 1 :(得分:0)

您可以采取下一步方式(已选中): 注意: 1.此代码中$ shift为空。 2.您需要决定如何将time_difference转换为几小时

$actual_dateIn  = "2013-06-01 06:54:00";
$actual_in_arr = explode(' ', $actual_dateIn);

$actual_dateOut = "2013-06-01 17:20:00";
$actual_out_arr = explode(' ', $actual_dateOut);

$actual_in_time = strtotime(date('Y-m-d').' '.$actual_in_arr[1]);
$actual_out_time = strtotime(date('Y-m-d').' '.$actual_out_arr[1]);

$range_dateIn     = "08:00:00";
$range_dateOut    = "18:00:00";
$range_in_time = strtotime(date('Y-m-d').' '.$range_dateIn);
$range_out_time = strtotime(date('Y-m-d').' '.$range_dateOut);

 if($actual_in_time <= $range_in_time && $actual_out_time <= $range_out_time)
 {   
    $time_difference = $range_out_time - $actual_out_time;
    $hours = round( $time_difference/60/60, 2 );
    $sql_insert = "INSERT INTO tbl_ot (id, fDate, shiftCode, ot ) 
                   VALUES ('$id', '$actual_dateIn', '$shift', '$hours')";
    $result_ot = mysql_query($sql_insert);  
 }