Page 1 of 1

Strange behaviour - PHP

Posted: Tue Sep 15, 2009 4:53 am
by dejvos
Hi,

I'm faceing a realy strange behaviour of php. The code bellow generates this queries:

Code: Select all

 
SELECT COUNT(*) FROM rm_task WHERE den_pravidelny > '2009-10-12 00:00:00' AND den_pravidelny < '2009-10-13 00:00:00' AND pomocne_id = 146;
SELECT COUNT(*) FROM rm_task WHERE den_pravidelny > '2009-10-13 00:00:00' AND den_pravidelny < '2009-10-14 00:00:00' AND pomocne_id = 146;
SELECT COUNT(*) FROM rm_task WHERE den_pravidelny > '2009-10-14 00:00:00' AND den_pravidelny < '2009-10-15 00:00:00' AND pomocne_id = 146;
SELECT COUNT(*) FROM rm_task WHERE den_pravidelny > '2009-10-15 00:00:00' AND den_pravidelny < '2009-10-16 00:00:00' AND pomocne_id = 146;
SELECT COUNT(*) FROM rm_task WHERE den_pravidelny > '2009-10-16 00:00:00' AND den_pravidelny < '2009-10-17 00:00:00' AND pomocne_id = 146;
SELECT COUNT(*) FROM rm_task WHERE den_pravidelny > '2009-10-19 00:00:00' AND den_pravidelny < '2009-10-20 00:00:00' AND pomocne_id = 146;
SELECT COUNT(*) FROM rm_task WHERE den_pravidelny > '2009-10-20 00:00:00' AND den_pravidelny < '2009-10-21 00:00:00' AND pomocne_id = 146;
SELECT COUNT(*) FROM rm_task WHERE den_pravidelny > '2009-10-21 00:00:00' AND den_pravidelny < '2009-10-22 00:00:00' AND pomocne_id = 146;
SELECT COUNT(*) FROM rm_task WHERE den_pravidelny > '2009-10-22 00:00:00' AND den_pravidelny < '2009-10-23 00:00:00' AND pomocne_id = 146;
SELECT COUNT(*) FROM rm_task WHERE den_pravidelny > '2009-10-23 00:00:00' AND den_pravidelny < '2009-10-24 00:00:00' AND pomocne_id = 146;
SELECT COUNT(*) FROM rm_task WHERE den_pravidelny > '2009-10-26 23:00:00' AND den_pravidelny < '2009-10-27 23:00:00' AND pomocne_id = 146;
 
Watch last two or three rows - suddenly there is another time even if I add to var $date whole 24 hours (line 39). How it is possible?


Code: Select all

 
foreach($pravidelne AS $prav){                                                                                      
        $date = strtotime(date('Y-m-d').' 00:00:00');                                                                   
        $pokracovat = true;                                                                                             
        $limit = $date + PLANOVANI*7*24*60*60;                                                                          
        while($pokracovat){                                                                                             
            //print_r($prav);                                                                                           
            if(isset($prav[date('N',$date)]) && $prav[date('N',$date)] == 1){                                           
                echo "SELECT COUNT(*) FROM rm_task WHERE den_pravidelny > '".date('Y-m-d H:i:s',$date)."' AND den_pravidelny < '".date('Y-m-d H:i:s',$date+60*60*24)."' AND pomocne_id = ".$prav['id'].";";                                                                                                                                                             
                $kontrola =& $db->getCol("SELECT COUNT(*) FROM rm_task WHERE den_pravidelny > '".date('Y-m-d H:i:s',$date)."' AND den_pravidelny < '".date('Y-m-d H:i:s',$date+60*60*24)."' AND pomocne_id = ".$prav['id'].";");                                                                                                                                        
                if(DB::isError($kontrola)) die('[ERROR 004:]'.$kontrola->getMessage());                                                                                             
 
                if($kontrola[0] == 0){
                    $vOd = explode(' ',$prav['resit_od']);
                    $vDo = explode(' ',$prav['resit_do']);
                                                          
                    $vals = array(                        
                            'resit_od' => date('Y-m-d',$date).' '.$vOd[1],
                            'resit_do' => date('Y-m-d',$date).' '.$vDo[1],
                            'projekt' => -1,                              
                            'nazev' => $prav['nazev'],                    
                            'resitel' => $p['id'],                        
                            'zadano' => date('Y-m-d H:i:s'),              
                            'osobni' => 1,                                
                            'pomocne_id' => $prav['id'],                  
                            'den_pravidelny' => date('Y-m-d',$date).' '.$vOd[1]
                    );                                                         
                                                                               
                    $je_neco =& $db->getCol("SELECT COUNT(*) FROM rm_task WHERE resit_od < '".$vals['resit_do']."' AND resit_do > '".$vals['resit_od']."' AND resitel = ".$p['id']." AND osobni = 0;");                                                                                                                                                                 
                    if(DB::isError($je_neco)) die('[ERROR 005:]'.$je_neco->getMessage());                                                                                           
                    //print_r($vals);                                                                                                                                               
                    if($je_neco[0]==0){                                                                                                                                           
                        //echo "sdasdas\n";                                                                                                                                         
                        $ins =& $db->autoExecute('rm_task',$vals,DB_AUTOQUERY_INSERT);                                                                                              
                        if(DB::isError($ins)) die('[ERROR006:]'.$ins->getMessage());                                                                                               
                    };                                                                                                                                                              
                };                                                                                                                                                                  
            };                                                                                                                                                                      
                                                                                                                                                                                             $date+=60*60*24;                                                                                                                                                      
            if($limit < $date) $pokracovat = false;                                                                                                                                 
        }; 
 
Thanks!

Re: Strange behaviour - PHP

Posted: Tue Sep 15, 2009 5:06 am
by onion2k
Daylight savings time... the clocks go back an hour. You code needs to take that into account. Or just ignore the time and just use the date, which would work just as well.

Re: Strange behaviour - PHP

Posted: Tue Sep 15, 2009 5:09 am
by dejvos
Thanks! That's it