Autor | Zpráva | ||
---|---|---|---|
Lechy Profil |
Ahoj, lze nějak udělat bez pomocí cronu, když v proměnný budu mít třeba start 14:00 konec 20:00 tak, aby se mi ukázoval požadovaný text od 14:00 do 20:00? Existuej na to nějaký script? Děkuji všem za rady.
Moderátor DoubleThink: Titulek „Spouštěcí skript“ nevystihuje podstatu dotazu. Příště zkus prosím vymyslet lepší.
|
||
panther Profil |
#2 · Zasláno: 25. 8. 2010, 13:59:31
Lechy:
PHP má mj. funkci date, dle které získáš aktuální čas. Jednoduchou podmínkou pak můžeš na základě aktuálního času měnit obsah. |
||
dehtak Profil |
#3 · Zasláno: 25. 8. 2010, 14:55:17 · Upravil/a: dehtak
if (date("H") >="14" && date("H")<="20"){ Echo "nejakej text"; }else{ echo "jinej text"; } |
||
Lechy Profil |
#4 · Zasláno: 25. 8. 2010, 15:19:28
dehtak:
Děkuji, nyní ale mám <?php $date = StrFTime("%H:%M - %d.%m.%Y", Time()); echo"Aktuální čas: $date"; if (date("H") >="14" && date("H")<="15"){ Echo "nejakej text"; }else{ echo "jinej text"; } ?> a zobrazuje se mi pořád "nejakej text" přitom by mělo "jinej text" |
||
PostCC Profil |
#5 · Zasláno: 25. 8. 2010, 15:31:55
Lechy:
Asi jsem to nepobral. Poslal jste sem ten script v 15:19:28, takže podle mne platí, že Date("H") je rovno "15". Podmínka Date("H") >= "14" && Date("H") <= "15" je tudíž splněna, provede se tedy první část rozhodování a vypíše se "nejakej text". Co je na tom špatně? |
||
Lechy Profil |
#6 · Zasláno: 25. 8. 2010, 15:36:58
Omlouvám se, myslel jsem,že 15 znamená 15:00, už funguje jak má :)
|
||
dehtak Profil |
#7 · Zasláno: 25. 8. 2010, 15:39:48
Lechy:
je to spravne protoze je to v case od 14 - 15 hodin tak se zobrazuje nejakej text az bude treba 16 hodin tak se bude zobrazovat jinej text |
||
dehtak Profil |
#8 · Zasláno: 25. 8. 2010, 15:57:01
Lechy:
Moje chyba mel jsem ti tam pripsat i minuty aby to bylo presne , protoze kdyz je Cas treba 15:45 tak date ("H") zobrazi pouze 15. Takze pro zpresneni by melo bejt if (date("H:i") >="14:00" && date("H:i")<="20:00") ............... |
||
Lechy Profil |
#9 · Zasláno: 26. 8. 2010, 09:56:46 · Upravil/a: Lechy
dehtak:
Děkuji, funguje parádně, ještě jak by se tam dalo udělat i datum/měsíc a rok? zkoušel jsem if (date("d.m.y H:i") >="26.08.2010 09:52" && date("d.m.y H:i")<="26.08.2010 20:00") nebo if (date("d.m.y/H:i") >="26.08.2010/09:52" && date("d.m.y/H:i")<="26.08.2010/20:00") ale ani jedno nefunguje |
||
PostCC Profil |
#10 · Zasláno: 26. 8. 2010, 10:59:35
Lechy:
No, to bude tím, že tenhle formát data je úplně k ničemu. Pro jakékoli řazení, porovnávání a indexování je lépe používat standardní formát: Date("Y-m-d H:i:s") => "2010-08-26 10:58:32" Tento formát lze porovnávat a dá se podle něj i chronologicky řadit. Důležité je, aby všechny porovnávané údaje byly ve stejném formátu. |
||
Lechy Profil |
#11 · Zasláno: 26. 8. 2010, 11:12:06
PostCC:
Děkuji, vyzkouším |
||
Lechy Profil |
#12 · Zasláno: 26. 8. 2010, 11:27:45
Ještě šlo by tam přidělat že od (datumu,času) 2010-08-26 12:15 dál napsalo registrace skončily?
Nyní mám: if (date("Y-m-d H:i") >="2010-08-26 11:00" && date("Y-m-d H:i")<="2010-08-26 12:15"){ Echo "<td width=\"70%\" class='ok'>Registrace spuštěny!</td>"; }else{ echo "<td width=\"70%\" class='lose'>Registrace nezačaly!</td>"; } |
||
panther Profil |
#13 · Zasláno: 26. 8. 2010, 12:01:40
Lechy:
if - elseif - else |
||
Lechy Profil |
#14 · Zasláno: 26. 8. 2010, 12:37:09
if (date("Y-m-d H:i") >="2010-08-26 11:00" && date("Y-m-d H:i")<="2010-08-26 12:15"){ echo "<td width=\"70%\" class='ok'>Registrace spuštěny!</td>"; }elseif{ echo "<td width=\"70%\" class='lose'>Registrace nezačaly!</td>"; } else{ echo "<td width=\"70%\" class='lose'>Registrace skončily!</td>"; } a hlásí mi to: Parse error: syntax error, unexpected '{', expecting '(' in /home/free/own.cz/r/renegades-guild/root/www/modules/inc_raid.php on line 41 |
||
PostCC Profil |
#15 · Zasláno: 26. 8. 2010, 12:45:34
Lechy:
ElseIf samozřejmě vyžaduje opět v závorce podmínku: If(Podmínka1) { Proveď něco; } ElseIf(Podmínka2) { Proveď něco jiného; } Else { Nesplněna ani jedna předchozí podmínka, proveď ještě něco jiného; } |
||
DoubleThink Profil * |
#16 · Zasláno: 26. 8. 2010, 13:43:41
Lechy:
„date("Y-m-d H:i") >="2010-08-26 11:00"“ Tohle nebude nikdy vracet smysluplný výsledek. Porovnáváš dva řetězce numerickým operátorem. Zvol numerickou (a lineární) reprezentaci času - typicky Unixový timestamp. |
||
PostCC Profil |
#17 · Zasláno: 26. 8. 2010, 14:17:30
DoubleThink:
Dovolil bych si zdvořile nesouhlasit. Vzhledem ke shodné struktuře textového řetězce je zcela regulérní (díky netypovosti PHP) porovnávat je oproti sobě. Za zásadní výhodu považuji fakt, že lze porovnávat i data před začátkem Unix timestamp, tedy před rokem 1970 a po jeho skončení (na 32 bit systémech rok 2038). Samozřejmě pak porovnávaný údaj nemůže být výsledkem funkce Date(). Nicméně souhlasím s tím, že pokud oba údaje existují a lze je vyjádřit v Unix timestamp, je nepochybně mnohem jednodušší a rychlejší porovnat je jako integer. |
||
DoubleThink Profil * |
#18 · Zasláno: 27. 8. 2010, 00:06:25
PostCC:
„Dovolil bych si zdvořile nesouhlasit. Vzhledem ke shodné struktuře textového řetězce je zcela regulérní (díky netypovosti PHP) porovnávat je oproti sobě“ Je mi celkem šumák, co si dovolíš nebo nedovolíš. Faktem zůstává, že z řetězce "Y-m-d H:i" zůstane při přetypování jen fragment "Y" a ostatní jde do kopru. Ergo takhle porovnávat časy prostě nejdou. Tečka. |
||
PostCC Profil |
#19 · Zasláno: 27. 8. 2010, 08:29:56
DoubleThink:
To mne zaujalo. Takže porovnání: Echo "2010-08-10 12:32:54" <= "2010-07-05 05:43:11" ? "JSOU TO ČÍSLA" : "JSOU TO ŘETĚZCE"; vrátí podle vás co? Já tvrdím, že "JSOU TO ŘETĚZCE". Pokud se pletu, rád se dozvím víc, protože ať čtu ten manuál od začátku nebo od konce, pořád mi vychází, že při tomto porovnávání se uplatní první řádek v tabulce Comparison with Various Types, čili numerical or lexical comparison. Kde dělám chybu? |
||
Nox Profil |
#20 · Zasláno: 27. 8. 2010, 08:35:28
PostCC:
Tahle konstrukce je nesmyslná, to jestli je jedna hodnota větší než druhá přece neovlivní jejich typ Každopádně to nebude fungovat, řetězcový porovnání nemá žádný ponětí o čase => buď jak řekl DoubleThink timestamp nebo případně date_diff() nebo DateTime::diff() |
||
PostCC Profil |
#21 · Zasláno: 27. 8. 2010, 08:47:03 · Upravil/a: PostCC
Nox:
Ale já nerozporuju typ porovnávaných operandů a ani v nejmenším netvrdím, že vyjádření času v Unix time nebo porovnání pomocí k tomu určených funkcí není lepší. Současně neříkám, že řetězcové porovnávání musí mít ponětí o čase, jen využívám faktu, že řetězcová řada časových vyjádření ve formátu "Y-m-d H:i:s" je nespojitá alfanumericky vzestupná sekvence. Čili že řetězce v tomto formátu budou spolehlivě seřazeny chronologicky, protože takto vyjádřené časové údaje na časové ose budou vždy v relativním umístění vůči sobě odpovídat relativní pozici adekvátních Unix timestamps. Ten příklad výše je možná špatně formulovaný, samozřejmě že to jsou ve všech případech řetězce, ale chtěl jsem tím jen doložit, že při porovnávání je na ně hleděno jako na řetězce, nikoli jako na čísla, což jsem vyrozuměl z reakce DoubleThink. Takže myslím, že to musí fungovat, koneckonců ten citovaný příkaz je toho nejlepším důkazem (byť uznávám, že pouze jedinou konkrétní aplikací) :-) |
||
gtext Profil * |
#22 · Zasláno: 27. 8. 2010, 09:18:19
DoubleThink:
„date("Y-m-d H:i") >="2010-08-26 11:00"“ Tohle nebude nikdy vracet smysluplný výsledek. Porovnáváš dva řetězce numerickým operátorem. tohle dle mého bude vracet vždy smysluplný a správný výsledek. pokud vím tak v php lze porovnávat řetězce numerickým operátorem. a díky tomu, že řetězec datumu se v tomto případě měmí od konce tak to logicky fungovat bude. |
||
Časová prodleva: 14 let
|
0