Sunriset Ierakstīts Februāris 13, 2012 Share Ierakstīts Februāris 13, 2012 (labots) Lieta tāda ,kam man vajag vienam noteiktam maršrutam 3 tuvākos laikus pēc tagadējā laika, es izveidoju scriptu ,bet viņš citreiz rāda vienādus rezūltātus, un citreiz rāda nepareizi tuvāko laiku , kas varētu būt ne tā? <?php $day=date("l"); //Nosaka dienu (angliski) $pulkstenis=date("H:i:s"); //Nosaka laiku $stundas=date("H"); //Nosaka stundas $minutes=date("i"); //Nosaka minutes $sekundes=date("s"); //Nosaka sekundes $intervals5=$minutes+5; //Intervāls +5min $intervals10=$minutes+10; //Intervāls +10min $intervals15=$minutes+15; //Intervāls +15min $darbad = array("22:32","22:33","22:39","22:46","23:05"); // Datu baze darba dienam $brivd = array("22:05","22:15","22:35","24:05","12:05"); // Datu baze cilosanas dienam $brivd2 = array("22:05","22:15","22:35","24:05","12:05"); // Datu baze pohu dienam function closest($darbad, $number){ if($i = array_search( $number, $darbad)) return $i; $darbad[] = $number; sort($darbad); $i = array_search($number, $darbad); if($i && isset($darbad[$i+1])) return $darbad[$i+1]; return null; } function closest2($brivd, $number){ if($i = array_search( $number, $brivd)) return $i; $brivd[] = $number; sort($brivd); $i = array_search($number, $brivd); if($i && isset($brivd[$i+1])) return $brivd[$i+1]; return null; } function closest3($brivd2, $number){ if($i = array_search( $number, $brivd2)) return $i; $brivd2[] = $number; sort($brivd2); $i = array_search($number, $brivd2); if($i && isset($brivd2[$i+1])) return $brivd2[$i+1]; return null; } if ($day == "Monday"){ $diena = "Pirmdiena";} if ($day == "Tuesday"){ $diena = "Otrdiena";} if ($day == "Wednesday"){ $diena = "Trešdiena";} if ($day == "Thursday"){ $diena = "Ceturtdiena";} if ($day == "Friday"){ $diena = "Piektdiena";} if ($day == "Sunday"){ $diena = "Sesdiena";} if ($day == "Saturday"){ $diena = "Svētdiena";} echo $diena; echo "</BR>"; echo $pulkstenis; if ($diena == "Pirmdiena" OR $diena == "Otrdiena" OR $diena == "Trešdiena" OR $diena == "Ceturtdiena" OR $diena == "Piektdiena"){ echo "</BR><center>"; echo closest($darbad, "$stundas:$minutes:$sekundes"); echo "</BR></center><center>"; echo closest($darbad, "$stundas:$intervals5:$sekundes"); echo "</center><center>"; echo closest($darbad, "$stundas:$intervals10:$sekundes"); echo "</center>"; } elseif ($diena == "Sesdiena") { echo "</BR><center>"; echo closest2($brivd, "$stundas:$minutes:$sekundes"); echo "</BR></center><center>"; echo closest2($brivd, "$stundas:$intervals5:$sekundes"); echo "</center><center>"; echo closest2($brivd, "$stundas:$intervals10:$sekundes"); echo "</center>"; } else{ echo "</BR><center>"; echo closest3($brivd2, "$stundas:$minutes:$sekundes"); echo "</BR></center><center>"; echo closest3($brivd2, "$stundas:$intervals5:$sekundes"); echo "</center><center>"; echo closest3($brivd2, "$stundas:$intervals10:$sekundes"); echo "</center>"; } ?> , kā arī ja pēdējais autobuss ir 24:00 un nākošais 6:00 rezūltātu izdos arī nepareizu Labots Februāris 13, 2012 - Sunriset Link to comment Share on other sites More sharing options...
Sunriset Februāris 24, 2012 Author Share Februāris 24, 2012 Piedodiet par dubultpostu , bet es paceļu augstāk , jo tēma bija nopeldējusi , tiešām neviens nezin , kādu variantu? Link to comment Share on other sites More sharing options...
Landsat7 Februāris 24, 2012 Share Februāris 24, 2012 Pats sacerēji visu šo kodu? Un tu vispār saproti, kā tā programma strādā un ko viņa dara? Variantu zinu - domā citu algoritmu, jo šobrīd izmantotais ir nepareizs. Vēlreiz izlasi šo kā arī ja pēdējais autobuss ir 24:00 un nākošais 6:00 rezūltātu izdos arī nepareizu un uzmanīgi paskaties uz savu skriptu... Un kas vēl tās par +5/10/15 minūtēm? Link to comment Share on other sites More sharing options...
usver Februāris 24, 2012 Share Februāris 24, 2012 (labots) 1) nosaki, kas par laiku ir tagad, uz kuru dienu tas attiecas - brīvdienu vai darbadienu vai ko. 2) pārbīdi laikus. Teiksim, tagad ir "sestdienās autobusi būs 23:01, 24:01, 01:01". Tas jauc galvu. 01:01 un 24:01 ir jau svētdeina. Un 24:01 NELIETO - tā vietā labāk lieto 00:01, mašīnām nav pieņemts skaitīt "šodien 24:01..". vai nu šodien 00:01, vai arī rīt 00:01. Pārbīdi, lai nejauc galvu. Piektdienās >= pusnakts autobusus skaiti jau kā sestdienai piederīgos. 3) $day=date("l"); //Nosaka dienu (angliski) if ($day == "Monday"){$diena = "Pirmdiena";} if ($day == "Tuesday"){$diena = "Otrdiena";} if ($day == "Wednesday"){$diena = "Trešdiena";} if ($day == "Thursday"){$diena = "Ceturtdiena";} if ($day == "Friday"){$diena = "Piektdiena";} if ($day == "Sunday"){$diena = "Sesdiena";} if ($day == "Saturday"){$diena = "Svētdiena";} echo $diena; .. Visa lielā problēma - Tu mēģini operēt ar stringiem tur, kur vajag konkrētus laikus un vienības tā vietā, lai skraidītu pa visiem iespējamajiem variantiem. 2 rindiņās šo var izteikt strukturēti: $weekdays = array('Svētdiena','Pirmdiena','Otrdiena','Trešdiena','Ceturtdiena','Piektdiena','Sestdiena'); echo 'Šobrīd ir '.$weekdays[date('w')].'.'; Tas pats ar laikiem - noskaidro, cikos ir sākusies šodiena, nosaki, vai šodiena ir darbadiena un starp variantiem meklē mazākos no tiem, kuri vēl nav pagājuši. Un būs. pseidokods brutālam bruteforce: $str_begin = date("Y-m-d"); echo $str_begin; foreach($brivd as $sl){ $time = strtotime($str_begin.' '.$sl); echo date('Y-m-d H:i:s',$time).' '; if($time < date('U')){ echo 'jau pagājis.'; } else { echo 'vēl tikai būs.'; } } Vismaz labāk nekā kā oriģinālā - tiešu sakritību meklēšana. Labots Februāris 24, 2012 - usver 1 Link to comment Share on other sites More sharing options...
Sunriset Februāris 25, 2012 Author Share Februāris 25, 2012 Jā , kodu sarakstīju pats , paldies par ieteikumiem Link to comment Share on other sites More sharing options...
ggg97 Februāris 25, 2012 Share Februāris 25, 2012 Mazliet oftopic jautājums autoram. To datubāzi ar laikiem tu savadi pats ar roku no "Rīgas Stiksmes" saraksta, vai kautkā viltīgi slēdzies klāt RS datubāzei? Tāds skriptiņš arī interesētu, kad būs gatavs Link to comment Share on other sites More sharing options...
Sunriset Februāris 26, 2012 Author Share Februāris 26, 2012 Kad pabeigšu , izlikšu te , pagaidām ar roku ir doma rakstīt , jo vajag tikai vienam maršrutam. Bet manuprāt ir arī metodes , kā to panākt nedublējot ar roku sarakstu , bet par to , lai runā pieredzējušie... Link to comment Share on other sites More sharing options...
Recommended Posts
Izveido kontu, vai pieraksties esošajā, lai komentētu
Jums ir jābūt šī foruma biedram, lai varētu komentēt tēmas
Izveidot jaunu kontu
Piereģistrējies un izveido jaunu kontu, tas būs viegli!
Reģistrēt jaunu kontuPierakstīties
Jums jau ir konts? Pierakstieties tajā šeit!
Pierakstīties tagad!