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
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
if (date("H") >="14" && date("H")<="20"){
Echo "nejakej text";
}else{
echo "jinej text";
}
Lechy
Profil
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
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
Omlouvám se, myslel jsem,že 15 znamená 15:00, už funguje jak má :)
dehtak
Profil
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
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
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
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
PostCC:
Děkuji, vyzkouším
Lechy
Profil
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
Lechy:
if - elseif - else
Lechy
Profil
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
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 *
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
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 *
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
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
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
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 *
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.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0