设置手动日期时,定时器不工作


strtotime not working when giving a manual date

我想查看两个小时之间的差异,但是当用户没有注销时,我以字符串形式给它一个手动小时,然后我尝试将其转换为时间并检查差异。然而,结果总是$d_time_in,即使这两个字符串不是空的,它们具有相同的格式。

      $start_timestamp = mktime(0, 0, 0, $_POST[selectMonth], $_POST[selectDay], $_POST[selectYear]);
$end_timestamp = $start_timestamp + 86399;
$q1 = "SELECT c.user_id, c.date, c.time_in, c.time_out, u.user_firstname, u.user_lastname 
        FROM control_time c 
            LEFT JOIN user u
                ON u.user_id = c.user_id
            WHERE c.date >= $start_timestamp AND c.date <= $end_timestamp";
$r1 = mysql_query($q1) or die(mysql_error());
$num_rows = mysql_num_rows($r1);
if($num_rows > 0){
    $display .= "<table border='"0'" cellspacing='"1'" cellpadding='"4'">
                      <tr>
                        <td bgcolor='"#CCCCCC'"><strong>Usuario</strong></td>   
                        <td bgcolor='"#CCCCCC'"><strong>Fecha</strong></td> 
                        <td bgcolor='"#CCCCCC'"><strong>Ingreso</strong></td>   
                        <td bgcolor='"#CCCCCC'"><strong>Salida</strong></td>    
                        <td bgcolor='"#CCCCCC'"><strong>Trabajadas</strong></td>    
                        </tr>";
    while($time_info = mysql_fetch_assoc($r1)){
        if($time_info[time_in] > ($time_info[date]+34200)){
            $in_bg = "#F3F781";
        }else{
            $in_bg = "#DDDDDD";
        }
        //specify time in 
        $d_time_in = date("G:i a", $time_info[time_in]);
        if($time_info[time_out] == 0){
            if(date('w', $time_info[date]) == 6){
                $d_time_out = '15:00 pm';
            }else{
                $d_time_out = '19:00 pm';
            }
            $out_time = strtotime($d_time_out);
            $out_bg = "#F5DA81";
        }else{
            $d_time_out = date("G:i a", $time_info[time_out]);
            $out_time = strtotime($d_time_out);
            $out_bg = "#DDDDDD";
        }
        $difference_hours = strtotime($d_time_in) - $out_time;
        if($difference_hours != 0){
            $d_time_worked = date("G:i",$difference_hours);
        }else{
            $d_time_worked= "00:00";
        }
        $display .= "
                      <tr>
                        <td bgcolor='"#DDDDDD'">$time_info[user_firstname] $time_info[user_lastname]</td>
                        <td bgcolor='"#DDDDDD'">".date("d-m-y", $time_info[date])."</td>
                        <td bgcolor='"$in_bg'">$d_time_in</td>
                        <td bgcolor='"$out_bg'">$d_time_out</td>
                        <td bgcolor='"#DDDDDD'">$d_time_worked</td>
                      </tr>";
    }
    $display .= "</table>";
}

很难说问题出在哪里。

但是试着测试最后一个块并注释整个上面的代码。

$difference_hours = strtotime($d_time_in) - strtotime($d_time_out);

将$d_time_in和$d_time_out设置为两个常量时间戳

如果这段代码运行良好(您得到了时差),请转到上面的块并测试它。

$d_time_in = date("G:i a", $time_info[time_in]);

相同的逻辑。使用两个预设的确定时间戳进行测试。

好了,看了100遍之后,我找到了解决办法。

$start_timestamp = mktime(0, 0, 0, $_POST[selectMonth], $_POST[selectDay], $_POST[selectYear]);
$end_timestamp = mktime(0, 0, 0, $_POST[selectMonthE], $_POST[selectDayE], $_POST[selectYearE]);
$end_timestamp = $end_timestamp + 86399;
$q1 = "SELECT c.user_id, c.date, c.time_in, c.time_out, u.user_firstname, u.user_lastname 
        FROM control_time c 
            LEFT JOIN user u
                ON u.user_id = c.user_id
            WHERE c.date >= $start_timestamp AND c.date <= $end_timestamp";
$r1 = mysql_query($q1) or die(mysql_error());
$num_rows = mysql_num_rows($r1);
if($num_rows > 0){
    $display .= "<table border='"0'" cellspacing='"1'" cellpadding='"4'">
                      <tr>
                        <td bgcolor='"#CCCCCC'"><strong>Usuario</strong></td>   
                        <td bgcolor='"#CCCCCC'"><strong>Fecha</strong></td> 
                        <td bgcolor='"#CCCCCC'"><strong>Ingreso</strong></td>   
                        <td bgcolor='"#CCCCCC'"><strong>Salida</strong></td>    
                        <td bgcolor='"#CCCCCC'"><strong>Trabajadas</strong></td>    
                        </tr>";
    while($time_info = mysql_fetch_assoc($r1)){
        if($time_info[time_in] > ($time_info[date]+34200)){
            $in_bg = "#F3F781";
        }else{
            $in_bg = "#DDDDDD";
        }
        //specify time in 
        $d_time_in = date("G:i:s", $time_info[time_in]);
        $in_time = strtotime($d_time_in);
        //specify time out
        if($time_info[time_out] == 0){
            //if time out is equal to 0 lets set it manually
            if(date('w', $time_info[date]) == 6){
                //if its saturday
                $d_time_out = '15:00:00';
            }else{
                //if its any other day
                $d_time_out = '19:00:00';
            }
            //convert out hour to time
            $out_time = strtotime($d_time_out);
            $out_bg = "#F5DA81";
        }else{
            //if time out != 0
            $d_time_out = date("G:i:s", $time_info[time_out]);
            //convert out hour to time
            $out_time = strtotime($d_time_out);
            $out_bg = "#DDDDDD";
        }
        //see differente between the two
        $difference_hours = $out_time - $in_time;
        if($difference_hours > 0){
            //show how many hours worked
            $d_time_worked = gmdate("H:i:s", $difference_hours);;
        }else{
            $d_time_worked= "00:00";
        }
        $display .= "
                      <tr>
                        <td bgcolor='"#DDDDDD'">$time_info[user_firstname] $time_info[user_lastname]</td>
                        <td bgcolor='"#DDDDDD'">".date("d-m-y", $time_info[date])."</td>
                        <td bgcolor='"$in_bg'">$d_time_in</td>
                        <td bgcolor='"$out_bg'">$d_time_out</td>
                        <td bgcolor='"#DDDDDD'">$d_time_worked</td>
                      </tr>";
    }
    $display .= "</table>";
}

谢谢大家的帮助!