Autor | Zpráva | ||
---|---|---|---|
Vareee Profil |
#1 · Zasláno: 25. 2. 2013, 11:47:27
Dobrý deň, narazil som na problém
<? for($a = 0; $a < $number; $a++) { $processed = $days[$a]; echo $processed; echo $time; $renderClass = $this->arrayCheck($events, $processed, $time); } ?> krok1. výsledok premennej processed v echu 2013-02-25, time v echu 01:00, do funkcie dosadzuje 2013-02-25, 01:00 krok2. výsledok premennej processed v echu 2013-02-26, time v echu 01:00, do funkcie dosadzuje 2013-02-25, 01:00 krok3. výsledok premennej processed v echu 2013-02-27, time v echu 01:00, do funkcie dosadzuje 2013-02-25, 01:00 atd. ako je niečo takéto možné? |
||
Tori Profil |
#2 · Zasláno: 25. 2. 2013, 12:12:18
Vareee:
Jak vypadá metoda arrayCheck? V tom původním kalendáři myslím není. $processed je řetězec nebo třeba pole? |
||
Vareee Profil |
#3 · Zasláno: 25. 2. 2013, 12:41:43
$processed = $days[$a]; echo $processed; processed je dátum (vo formáte Y-m-d). Máte pravdu, metóda arrayCheck v pôvodnej verzií nie je, momentálne som sa skontaktoval s autorom, ktorý bol veľmi ústretový a poslal mi novšiu nepublikovanú verziu tej triedy. Autor žiaľ nemá čas sa mne a ani tej triede viac venovať, preto som si niektoré veci už upravil.. Na druhú stranu si nemyslím že tá samotná trieda je až tak podstatná. Ide vážne o ten kus kódu. Premennú $processed som vytvoril práve a len s toho dôvodu že pri použití $days[$a] to robilo tieto "haluze" a chcel som skúsiť natvrdo pretypovať jej formáť. Späť k metóde arrayCheck, tú autor nechal pomerne variabilnú s nejakými ukážkami, ja som ju aktuálne v podstate celú zmazal aby som videl čo prejde do jej "vnútra".. function arrayCheck($array, $day, $time) { echo "vo funkcii $day - $time "; echo "<hr>"; } Výsledkom je ale stále to isté. - v cykle sa echo $processed mení - v metóde arrayCheck, s takýmto kódom, nie. Vôbec tomu nerozumiem.... |
||
peta Profil |
#4 · Zasláno: 25. 2. 2013, 13:29:48
<?php function arrayCheck($array, $day, $time) { return " " . "$day - $time\n"; } $events = ""; $days = array( "2013-02-25", "2013-02-26", "2013-02-27" ); $time = "1:00"; $number = 3; echo "<pre>"; for($a = 0; $a < $number; $a++) { $processed = $days[$a]; echo " " . $processed; echo " " . $time; echo $renderClass = arrayCheck($events, $processed, $time); } ?> Vypise: 2013-02-25 1:00 2013-02-25 - 1:00 2013-02-26 1:00 2013-02-26 - 1:00 2013-02-27 1:00 2013-02-27 - 1:00 |
||
Vareee Profil |
#5 · Zasláno: 25. 2. 2013, 14:14:25
Peťa, ďakujem za ochotu ale celkom neviem čo ste mi tých chcela dokázať. Ja v rozumiem tomu že takto by to malo ísť ale realita je taká že sa to chová ako som opísal..
Aby som pravdu povedal podľa mňa sa celé PHP chová dosť podivne.. Napr. jednoduché porovanie časov, kde chcem zistiť či time4check je intervale od timeform do timeto: $time4check = strtotime("22:30"); $timefrom = strtotime("01:00"); $timeto = strtotime("20:00"); if($time4check >= $timefrom && $time4check <= $timeto) { echo "je v intervale"; } else { echo "nie je v intervale"; } Takto to zbehne ale čo ak chcem mať v timefrom 1 hodinu a v timeto 24:00 (prípadne 00:00) Pokus 1. Dosadím tam 24:00, vráti haluz (ano viem v manuále je písané že strtotime nepozná 24:00) Pokus 2. Tak tam teda dám 00:00 a výsledkom sú opäť haluze. |
||
Tori Profil |
#6 · Zasláno: 25. 2. 2013, 14:27:28
Vareee:
„v timeto 24:00 (prípadne 00:00)“ To je rozdíl. `00:00` je začátek dnešního dne, `24:00` je začátek zítřejšího dne (aspoň u mě). `24:59` je za minutu jedna zítra ráno, 25 už se nedá použít. Možná by ten problém ↑ mohla ještě způsobovat cache prohlížeče (ale to jen tipuju; v tom kódu, který jste poslal chyba není, tzn. buď je v jiné části kódu anebo mimo kód). |
||
donny Profil |
Tori:
„To je rozdíl. `00:00` je začátek dnešního dne, `24:00` je začátek zítřejšího dne (aspoň u mě). `24:59` je za minutu jedna zítra ráno, 25 už se nedá použít.“ Ano? Máte zvláštne hodiny, moje 24:59 neukazujú :) Vareee „Pokus 1. Dosadím tam 24:00, vráti haluz (ano viem v manuále je písané že strtotime nepozná 24:00)“ Strtotime nemá čo poznať pretože 24:00 neexistuje, v 24 hodinovom formáte deň končí presne 23:59:59 potom následuje nový deň tj. 0:00. V tomto prípade by som použil mktime, ktorá dokáže urobiť Unix timestamp aj z 24:00.. <?php function getTimeFromString($time){ $time = explode(':', $time); return mktime($time[0], $time[1], $time[2]); } $timeto = getTimeFromString("24:00"); ?> |
||
YoSarin Profil |
Vareee
Hmm, a není ten $time4check náhodou kompletní (i s datem)? (to kdyby se načítal z db, pokud tam napíšeš opravdu jen "00:00" tak by to fungovat mělo... Jaké hodnoty vracejí jednotlivá strtotime? Moderátor Joker: Odstraněn přivolávač moderátorů
donny: od PHP 5.3 strtotime 24:xx zvládá. |
||
Vareee Profil |
YoSarin:
„Hmm, a není ten $time4check náhodou kompletní (i s datem)? (to kdyby se načítal z db, pokud tam napíšeš opravdu jen "00:00" tak by to fungovat mělo... “ ne není, načítať s databázy to chcem, ale momentálne už som sa vrátil späť k samotnej funkčnosti toho overenia. „Jaké hodnoty vracejí jednotlivá strtotime?“ $time4check = strtotime("22:30"); echo $time4check."<br>"; $timefrom = strtotime("11:00"); echo $timefrom."<br>"; $timeto = strtotime("00:00"); echo $timeto."<br>"; $timeto = getTimeFromString("24:00"); echo $timeto."<br>"; 1361827800 1361786400 1361746800 1361833200 Z tohoto je jasne vidieť že Tori má pravdu a zároveň if funguje správne, čo je ale zvláštne je strtotime. „donny:“ s tou tvojou funkciou to vyhodnotí správne, ale keď to spustím v kompletnom kalendári tak to znázorňuje o polhodinu pozadu :D idem sa asi obesiť. Update Ak to spravím takto $time4check = strtotime("22:30"); echo $time4check."<br>"; $timefrom = strtotime("11:00"); echo $timefrom."<br>"; $timeto = strtotime("24:00"); echo $timeto."<br>"; $timeto = getTimeFromString("24:00"); echo $timeto."<br>"; vráti toto 1361827800 1361786400 1361833200 |
||
YoSarin Profil |
hmm, btw, jak už vlastně psala Tori (a mně to nedošlo), mít v $timeto čas 00:00 je nesmysl (timeto je menší než timefrom a kontroluješ data v intervalu který vlastně neexistuje).
Moderátor Joker: Odstraněn přivolávač moderátorů
|
||
donny Profil |
#11 · Zasláno: 25. 2. 2013, 15:06:54
Vareee
Podľa mňa si strašným ale strašným spôsobom nepochopil celý ten skript a tiež princíp toho čo robíš. Skús si otvoriť denný kalendár v outlooku, alebo inom programe. Uvidíš jeden zásadný omyl s ktorým celý čas pracuješ, 0:00 nie je dole ale hore, tým štandardne deň začína nie končí! To ti celú tú tvoju logiku posúva úplne inam. |
||
peta Profil |
#12 · Zasláno: 25. 2. 2013, 15:24:40
Vareee:
Vzal jsem tvuj kod, doplnil o data, ktera v nem chybela, spustil a ukazal ti, ze ten kod funguje spravne. Zkus pouzit v cistem php souboru muj kod a uvidis, jestli se bude chovat tez spravne. To dokazuje, ze chybu zpusobuje prave ta cast kodu, kterou jsi si nechal pro sebe. Bohuzel to dela kazdych 9/10 z tazajicich. Vcetne mne, obcas :) |
||
Joker Profil |
#13 · Zasláno: 25. 2. 2013, 15:34:40
YoSarin:
Poznámka mimo téma, tři m-ka přivolají moderátory, pokud to není záměr, doporučuji psát „hmm“ v běžné formě (se dvěma m) ;-) |
||
Tori Profil |
#14 · Zasláno: 25. 2. 2013, 15:47:07
Vareee:
Ještě k tomuto: if($time4check >= $timefrom && $time4check <= $timeto) - tím ověřujete, jestli se uvnitř intervalu nachází jeden okamžik (čas $time4check), anebo tím ověřujete jestli se událost (= taky interval) nachází uvnitř jiného intervalu? V druhém případě by muselo být jiné porovnání:
if ($zacatek_udalosti <= $konec_intervalu && $konec_udalosti >= $zacatek_intervalu) echo 'udalost je aspoň zčásti uvnitř intervalu'; |
||
YoSarin Profil |
#15 · Zasláno: 25. 2. 2013, 15:49:06
Joker:
Pardon, to už je asi podruhý co se mi to stalo, vždycky mi to vypadne... :) |
||
Časová prodleva: 11 let
|
0