Strange behaviour - PHP

PHP programming forum. Ask questions or help people concerning PHP code. Don't understand a function? Need help implementing a class? Don't understand a class? Here is where to ask. Remember to do your homework!

Moderator: General Moderators

Post Reply
dejvos
Forum Contributor
Posts: 122
Joined: Tue Mar 10, 2009 8:40 am

Strange behaviour - PHP

Post 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!
User avatar
onion2k
Jedi Mod
Posts: 5263
Joined: Tue Dec 21, 2004 5:03 pm
Location: usrlab.com

Re: Strange behaviour - PHP

Post 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.
dejvos
Forum Contributor
Posts: 122
Joined: Tue Mar 10, 2009 8:40 am

Re: Strange behaviour - PHP

Post by dejvos »

Thanks! That's it
Post Reply