【问题标题】:PHP getting TIME difference in hours and minutes formatPHP以小时和分钟格式获取时间差异
【发布时间】:2021-06-16 06:13:19
【问题描述】:

我目前是 PHP 新手,我被这个问题困住了。我似乎无法从员工时间表中减去 TIME IN

function update_dtr($rs) {

    foreach ($rs as $key => $value) {

        $db=new Database ();
        $db->connect();

        //date_default_timezone_set('Asia/Ho_Chi_Minh');
        $empShift = $db->select(array('myilogin_46.DATE_TIME_RECORDS'),'SHIFT_START'
        ,"ID = '".$id."' and R_STATUS = 'A'");

      
        $sched= strtotime($empshift);
        $alterin = strtotime($value['alterIN']);
        if($sched>$alterin){
            $late= strtotime("00:00:00");

        }else{
            //subtract Alterin by the scedule so i can get late in hours and minutes format
            $late = $alterin - $sched;
        }

        $db->update_imp('myilogin_46.DATE_TIME_RECORDS',array(
                'date_in'=>date('Y-m-d',strtotime($value['alterIN']))
                ,'time_in_info'=>'ALTERED IN'
                ,'time_out_info'=>'ALTERED OUT' 
                ,'time_in'=>date('H:i',strtotime($value['alterIN']))
                ,'time_out'=>date('H:i',strtotime($value['alterOUT']))
                ,'date_out'=>date('Y-m-d',strtotime($value['alterOUT']))
                ,'late'=>gmdate('H:i',strtotime($late))
        ),"id = '".$value['dtrID']."' and id_emp = '".$value['empID']."' and R_STATUS = 'A'");
        $db->disconnect();

PS:我也尝试过 date_diff 方法,但它对我不起作用。 THis is what my database looks like

【问题讨论】:

  • 这可能会有所帮助:stackoverflow.com/questions/24936855/…
  • 试过链接里的所有方法,你给的,还是不行。我在控制台中收到此错误。可捕获的致命错误:无法将类 DateInterval 的对象转换为 /var/www/43_alteration/classes/cls.db.php 中的字符串 419
  • 您希望在哪一列中有所不同,以哪种格式显示?
  • ,'late'=>gmdate('H:i',strtotime($late)) 我在这里调用它。我希望格式为 H:i:s ("00:00:00") 与我的数据库格式相同。
  • 因此,根据上图中突出显示的字段的列,结果应该是 00:02:00 这个。对吗?

标签: php


【解决方案1】:

只需将以下函数与您的编辑代码一起使用,并在我的函数中使用其他更新对其进行更新。

function update_dtr($rs) {

    foreach ($rs as $key => $value) {

        $db=new Database ();
        $db->connect();

        //date_default_timezone_set('Asia/Ho_Chi_Minh');
        $empShift = $db->select(array('myilogin_46.DATE_TIME_RECORDS'),'SHIFT_START'
        ,"ID = '".$id."' and R_STATUS = 'A'");

      
        $sched= strtotime($empshift);
        $alterin = strtotime($value['alterIN']);
        if($sched>$alterin){
            $late= strtotime("00:00:00");

        }else{
            //subtract Alterin by the scedule so i can get late in hours and minutes format
            $late = datediff($alterin,$sched);
        }

        $db->update_imp('myilogin_46.DATE_TIME_RECORDS',array(
                'date_in'=>date('Y-m-d',strtotime($value['alterIN']))
                ,'time_in_info'=>'ALTERED IN'
                ,'time_out_info'=>'ALTERED OUT' 
                ,'time_in'=>date('H:i',strtotime($value['alterIN']))
                ,'time_out'=>date('H:i',strtotime($value['alterOUT']))
                ,'date_out'=>date('Y-m-d',strtotime($value['alterOUT']))
                ,'late'=>$late
        ),"id = '".$value['dtrID']."' and id_emp = '".$value['empID']."' and R_STATUS = 'A'");
        $db->disconnect();
        
        
        
 function datediff($d1,$d2) 
    {       
    $date1 = new DateTime($d1); 
    $date2=$date1->format('%H:%I:%S');
    $date2 = $date1->diff(new DateTime($d2));   
    return $date2->format('%H:%I:%S');
    }

【讨论】:

  • 谢谢我的伙计们,我会调整这个功能,如果成功了,我会更新你。非常感谢。
  • 不客气,只需使用它,如果需要,您可以在插入数据库时​​将其转换为 strtotime。
【解决方案2】:

原来 $empshift 没有作为时间数据类型返回。当我回显它时,它会将 sql 查询作为字符串本身返回。所以我在这里问了另一个问题:PHP echoed variable returns a mysql query string

【讨论】:

    【解决方案3】:

    我得到了答案,我就是这样做的。示例:shiftstart 08:30:00 AM 和 timein= 8:34:00 AM

    function update_dtr($rs) {
        foreach ($rs as $key => $value) {
          $db=new Database();
         $db->connect();
            
         $alterin= date('H:i:s', strtotime($value['alterIN']));
            
    
         $db->select(array('myilogin_46.DATE_TIME_RECORDS'),'SHIFT_START'
            ,"ID = '".$value['dtrID']."' and ID_EMP = '".$value['empID']."' and 
            R_STATUS='A'");
    
            foreach ($db->getResult() as $key => $value) {
    
                $shiftstart1 = $value['SHIFT_START'];
    
    
    
    
                $shiftstart= date('H:i:s',strtotime($shiftstart1));  
                 
             }                
                    var_dump($shiftstart);
                    var_dump($alterin> $shiftstart);
                        var_dump($alterin);
                    //working condition 
                    if($shiftstart >= $alterin){
          
                    $late= date('H:i:s',strtotime('00:00:00'));
    
                    }else{
                        
                        $late1=strtotime($alterin)-strtotime($shiftstart);
                    $late= gmdate('H:i:s', ($late1));
                    
                    }
                    // $db->disconnect();   
                        echo $late;
                        echo date('H:i:s',strtotime($late));
                        var_dump(date('H:i:s',strtotime($late)));
          }
    

    }

    输出应该是这样的:00:04:00

    【讨论】:

      猜你喜欢
      • 2013-11-22
      • 1970-01-01
      • 1970-01-01
      • 2012-10-11
      • 1970-01-01
      • 2019-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多