【问题标题】:strtotime not working when giving a manual date给出手动日期时strtotime不起作用
【发布时间】:2015-08-10 02:53:44
【问题描述】:

我想查看两个小时之间的差异,但是当用户不注销时,我在字符串中手动给它一个小时,然后我尝试将其转换为时间并检查差异。然而结果总是$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>";
}

【问题讨论】:

  • 呵呵,你的time_outtime_in 是常量吗?否则你至少应该得到几个 PHP 警告。
  • 两者都是时间戳,然后在php中转换为日期格式
  • 不,我的意思是文字 time_outtime_in。如果您使用$time_out$time_inTIME_OUTTIME_IN 我不会问这个问题...
  • 我编辑了整个代码,所以你可以看到。 time out 和 time in 仅在数组上使用 time in 和 time out 为我提供了正确的信息,但是在尝试查看两者之间的差异时出现了问题。
  • 我的意思是,PHP变量应该$开头,而你的time_outtime_in不要以它开头,而且它们也不是大写的,所以我想知道它们是否是常量,或者您是否错过了$...

标签: php date time difference


【解决方案1】:

很难说问题出在哪里。

但尝试测试最后一个块并注释整个上层代码。

$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]);

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

【讨论】:

    【解决方案2】:

    好吧,在重复了 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>";
    }
    

    感谢大家的帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多