Mám taký problém:
Dajme tomu ze dnes je 4.12.2004
$date_now = date("j.m.Y");
$end_date = "8.12.2004"
Potrebujem porovnat nieco ako toto :
if ($date_now >= $end_date) {
....
....
}
Problém je v tom, že nedokáže porovnať dátumi, čo sa ani nečudujem keď sú Stringy.
Prosím odpíšte, som zmätený...
Ďakujem.
Mrkni do manuálu na fci mktime(), kdysi jsem měl podobnej problém taky.
A potom to pôjde porovnat ?
Jedna vec ktorej vôbec nerozumiem :'( :( .
Načo to vlastne slúži? A ako to má byť?
$date_now = date("j.m.Y", mktime(?, ?, ?, ?, ?, ?));
$end_date = "8.12.2004"
Potrebujem porovnat nieco ako toto :
if ($date_now >= $end_date) {
....
....
}
Prepáčte že dávam takéto Lamovité otázky, ale niektoré veci vôbec neviem pochopiť :(
Prosím pomôžte.
Nejlepším řešením je IMHO vše dělat přes Time(). Myslím ukládat do DB. Z toho, co ti vyhodí time(), si vždy datum dokážeš vyseparovat ve formátu, jakým chceš ty sám. takže pak by to vypadalo:
$r = mysql_fetch_array(mysql_query("select * from tabulka where id = '$id' "));
$date_now = time();
$end_date = $r["sloupec_tabulky"];
if ($date_now >= $end_date) {
....
....
}
a je jedno v akom type mám uložený $end_date v tabulke? Myslim, ze ci to má byť typ : time alebo text alebo date alebo datetime ? Thx
$date_now = time(); //timestamp
$end_date = "8.12.2004";
$end_date = explode('.', $end_date); //rzdelim do pole podle tecek
$end_date = mktime(0,0,0,$end_date[1], $end_date[0], $end_date[2]);
//a ted mas casova razitka, muzes porovnavat. Ale bude to delat bordel, pokud je $end_date dnesni. Ony se totiz nevyctou hodiny (minuty a seknudy taky ne), ale v porovnavani by byly potreba...
To záleží na tobě ;o)
Bude ti to porovnávat to, co zadáš. čili když budeš mít $end_date třeba v time a bude to dejme tomu třeba 1137 nebo 11_37 nebo jak to máš, tak ti to porovná date now s oním řetězcem. Jednoduše bys měl mít $end_date ve stejném formátu jako date_now, protože to chceš porovnat. Takže když date_now bude 1.12.2004 tak end_date by mělo být zapsáno stejným způspbem, čili třeba 7.10.2005
Osobně ale porovnávání "je větší než" apod. doporučuji dělat přes formát n.d.Y (12.24.2004) protože jinak ti to bude chybovat při přechodu měsíců. (měl jsem podobný problém)
tak teda ak mam $date(n.d.Y) aj $end_date vo formáte n.d.Y tak to môžem porovnávať?
Eagleeye: uplna blbost. To pak neni porovnani data, protoze to co tomu davas jsou retezce, PHP nema tuseni ze je to datum. Tak to prevede na integer, takze z 12.24.2004 udela 12,24 (desetinne cislo) a porovnava to s danym datem. Coz v dusledku ignoruje rok... A tudiz je i jasne proc nemuze byt v tvem pripade 24.12.2004 (protoze by to udelalo 24,12 a porovnavalo by to nejdriv vetsi dny, kdyby byly stejne tak by hral roli mesic...)
Prišiel som na to, skúsim vám opísať ako som to spravil:
$date_now=date ("Ymd");
$end_date je tiež typu YMD co dá formát napr 20041211.
Pravdaže $end_date mám uložený v databázi pod tým formátom.
----
if ($date_now <= $end_date) {
....
}
čiže
if (20041208 <= 20041211) {
....
}
Funguje to perfektne. Dúfam, že som to dobre napísal ;)
Myslím si že je to celkom jednoduchý spôsob.
Princíp:
Naprv porovná roky, ak sú rovnaké tak mesiace, ak sú rovnaké tak dni.
Ak je rok väčší tak už je celé číslo väčšie o desať tisíc napr 20051209 a pod.
Díky aj tak za všetko!
jo, to je ono :) Akorat až budeš muset porovnávat i hodiny, minuty a sekundy, nebude ti stačit rozsah integeru :)
funous: Oj, máš pravdu, úplně jsem zapomněl odstranit tečky ;o)
Ale důvod, proč nefunguje 24122004 není v tečkách (protože ty ve skriptu nemám), ale v tom, že pokud srovnávám datum 01.12 a 24.11 - 0112 a 2412, tak to prostě vyhodí jako větší to druhé, protože ten první má o jeden znajk méně. Ale dík za opravu :o)
Ale keď tam pridáš rok a bude to v poradí Rok/Mesiac/Den tak to pôjde:
20041208 > 20040108
Mars Team: No vždyť o to přehození jde, stčí to udělat přes ndY, rok první být nemusí, já akorát odpovídám funousovi proč jsem to nemohl mít ve formátu 24122004 ;o)