Autor | Zpráva | ||
---|---|---|---|
Vader Profil |
#1 · Zasláno: 13. 6. 2011, 16:51:26
Mám problém, neviem ako zostaviť script, ktorý keď v option-e zvolím napr. február tak max počet dní sa v druhom optione obmedzí na 28 ale ak zvolím október tak sa obmedzí na 31.
|
||
_es Profil |
#2 · Zasláno: 13. 6. 2011, 17:03:57
Vader:
A čo ak bude chcieť návštevník vybrať najprv deň v mesiaci a až potom mesiac? |
||
Vader Profil |
#3 · Zasláno: 13. 6. 2011, 17:08:07
Ak by vybral hodnotu pre deň 31 a zvolil by napr. február (28), tak hodnota den by sa vynulovala na povodne napr <option>Vyber deň</option>
|
||
_es Profil |
#4 · Zasláno: 13. 6. 2011, 17:13:05
Vader:
„tak hodnota den by sa vynulovala“ No, z takýchto samosavynulujúcich ovládacích prvkov by asi návštevník radosť nemal. Čo ak sa len pomýlil vo výbere a chcel by to opraviť na marec? Nadbytočné opätovné nastavovanie dňa by ho asi netešilo. Prečo nespravíš len jednoduchú kontrolu správneho dátumu? |
||
Vader Profil |
#5 · Zasláno: 13. 6. 2011, 17:15:06
To by nebol žiaden problém, ale ja to potrebujem tak ako som už uviedol.
|
||
Časová prodleva: 3 dny
|
|||
peta Profil |
#6 · Zasláno: 16. 6. 2011, 15:47:43
google = javascript calendar example
Melo by to byt neco jako <script> date = new Date(); m = date.getMonth(); y = date.getFullYear(); dnu = (new Date(y,m+1,1) - new Date(y,m,1)) / (1000*60*60*24); alert(dnu); </script> |
||
Witiko Profil |
#7 · Zasláno: 16. 6. 2011, 18:32:43 · Upravil/a: Witiko
peta:
S úlevou vidím, že se takovými prkotinami jako definice proměnných stále nenecháváš omezovat v tvůrčí činnosti. :-) |
||
_es Profil |
#8 · Zasláno: 16. 6. 2011, 19:08:33
Witiko:
Márne rozmýšľam, čo má petov nezmyselný kód spoločné s dotazom, no možno to bude mať efekt, že Vadera prejdú pokusy s vytváraním podobných užívateľsky nepríjemných formulárov. |
||
Witiko Profil |
#9 · Zasláno: 16. 6. 2011, 21:55:54 · Upravil/a: Witiko
_es:
Co já jsem vyčetl, tak po zabalení petovo výtvoru do funkce bychom dostali kód, který při zavolání navrátí počet dní v aktuálním měsíci. Něco následujícího: function početDní(now) { now = now || new Date(); now.setDate(1); var then = new Date(now); then.setMonth(then.getMonth() + 1); // Tady by se nádherně vyjímalo použití accessorů - then.month++; return Math.round((then - now) / 86400000); }; new Date(2011, 56, 1) -> 1. 10. 2015 . Zdá se, že současné prohlížeče s tím nemají problém, jak jsou na tom starší modely nemám příležitost testovat. Firefox 2.0 mě přesvědčil, že je to snad bezpečné.
|
||
_es Profil |
#10 · Zasláno: 17. 6. 2011, 06:15:16
Witiko:
Pri poslednom mesiaci v roku a pri prestupných rokoch by mohli teoreticky nastať problémy. Počet dní v mesiaci sa dá asi zistiť aj bezpečnejším spôsobom. |
||
peta Profil |
#11 · Zasláno: 17. 6. 2011, 10:32:37
Witiko, _es: OT, vsak oni vam to moderatori jednou spocitaji.
Peta odpovidal na dotaz, jak zjistit pocet dni v mesici. Ano, pravda je, ze script zkolabuje na 12 mesici, kdy vytvori 1.13. - 1.12. To lze ale osetrit podminkou. Pocitam s tim, ze clovek, ktery polozi dotaz ma o programovani jakesi znalosti. Promenne samozrejme definuji vsude. zde je to hrube opomenuti. Ncmene to funkci scriptu ulozenemu do zvlastniho souboru nijak nenarusi. Opet, sikovny programator uz si to osetri. |
||
Chamurappi Profil |
#12 · Zasláno: 17. 6. 2011, 11:36:33
Reaguji na Witika:
„Zdá se, že současné prohlížeče s tím nemají problém, jak jsou na tom starší modely nemám příležitost testovat.“ Co já vím, tak s tím neměl nikdy nikdo problém. Nešlo by to stručněji a bez zdlouhavého dělení milisekund? function početDní(now) { now = now || new Date(); return new Date(now.getFullYear(), now.getMonth() + 1, 0).getDate(); }; Reaguji na peta: „pravda je, ze script zkolabuje na 12 mesici, kdy vytvori 1.13. - 1.12.“ Skutečně zkolabuje? „Opet, sikovny programator uz si to osetri.“ Tak si to příště laskavě ošetři, už když to sem píšeš, šikovný programátore. Tohle není otázka dodatečného ladění, tohle jsou základy. |
||
Witiko Profil |
#13 · Zasláno: 17. 6. 2011, 15:33:40 · Upravil/a: Witiko
Chamurappi:
„, 0)“ Pravda. Mělo mě napadnout, že tento jev bude fungovat i v opačném směru. Možná byla chyba vůbec z petovo scriptu vycházet. peta: „OT, vsak oni vam to moderatori jednou spocitaji.“ Dovolil bych si tipovat, že ty poslepované příšernosti, které sem s děsivou pravidelností zasíláš, přitáhnou jejich oči dříve, než mé v zásadě konstruktivní příspěvky. :-) |
||
Časová prodleva: 3 dny
|
|||
peta Profil |
#14 · Zasláno: 20. 6. 2011, 13:59:03
Chamurappi:
Ten script vypada zajimave. Pokud vim, tak dny je mozne nastavit 1-31. Jinak jsem vychazel z toho, ze JS takovou funkci nema, jako pocet dni v mesici :) http://www.w3schools.com/jsref/jsref_obj_date.asp Witiko: To math.round je tam zbytecne, protoze rozdil tech dvou cisel by mel byt celociselne delitelny, kdyz jsou h, m a ms nulove. |
||
Chamurappi Profil |
#15 · Zasláno: 21. 6. 2011, 15:32:07
Reaguji na peta:
„Pokud vim, tak dny je mozne nastavit 1-31.“ Cokoliv mimo rozsah přeteče do okolních měsíců (či roků). Takže nultý den následujícího měsíce je posledním dnem současného. „w>ww.w3schools.com/jsref/jsref_obj_date.asp“ Tenhle web je hodně nespolehlivý zdroj informací. „math.round je tam zbytecne“ Není. Vyzkoušej si to a uvidíš. |
||
Vader Profil |
Moderátor Chamurappi: Přesunuto z duplicity Datum v JS.
Mám tento script,ale mám menší problém,v JS moc neviem tak sa Vás chcem spýtať: - Ak si uživateľ najprv vybere deň 30. januára a taký deň v tom mesiaci bude existovať tak nehodí povodnu hodnotu Day,ale ak zvolí najprv 31. februára tak pole day da na povodnu hodnotu, lebo február má len 28 dní. JS: <body> Date Of Birth: <select name="month" onChange="changeDate(this.options[selectedIndex].value);"> <option value="0">Mesiac:</option> <option value="01">Január</option> <option value="02">Február</option> <option value="03">Marec</option> <option value="04">Apríl</option> <option value="05">Máj</option> <option value="06">Jún</option> <option value="07">Júl</option> <option value="08">August</option> <option value="09">September</option> <option value="10">Október</option> <option value="11">November</option> <option value="12">December</option> </select> <select name="day" id="day"> <option value="na">Day</option> <option value="1">1</option><option value="2">2</option><option value="3">3</option><option value="4">4</option><option value="5">5</option><option value="6">6</option><option value="7">7</option><option value="8">8</option><option value="9">9</option><option value="10">10</option><option value="11">11</option><option value="12">12</option><option value="13">13</option><option value="14">14</option><option value="15">15</option><option value="16">16</option><option value="17">17</option><option value="18">18</option><option value="19">19</option><option value="20">20</option><option value="21">21</option><option value="22">22</option><option value="23">23</option><option value="24">24</option><option value="25">25</option><option value="26">26</option><option value="27">27</option><option value="28">28</option><option value="29">29</option><option value="30">30</option><option value="31">31</option> </select> <select name="year" id="year"> <option value="na">Year</option> </select> <script language="JavaScript" type="text/javascript"> function changeDate(i){ var e = document.getElementById('day'); while(e.length>0) e.remove(e.length-1); var j=-1; if(i=="na") k=0; else if(i==2) k=28; else if(i==4||i==6||i==9||i==11) k=30; else k=31; while(j++<k){ var s=document.createElement('option'); var e=document.getElementById('day'); if(j==0){ s.text="Day"; s.value="na"; try{ e.add(s,null);} catch(ex){ e.add(s);}} else{ s.text=j; s.value=j; try{ e.add(s,null);} catch(ex){ e.add(s);}}}} y = 1997; while (y-->1906){ var s = document.createElement('option'); var e = document.getElementById('year'); s.text=y; s.value=y; try{ e.add(s,null);} catch(ex){ e.add(s);}} </script> </body> </html> |
||
etexweb Profil |
Moderátor Chamurappi: Přesunuto z duplicity Datum v JS.
Napadá ma riešenie v PHP: <?php $monthOptions = ''; $dayOptions = ''; $yearOptions = ''; for($month=1; $month<=12; $month++) { $monthName = date("M", mktime(0, 0, 0, $month)); $monthOptions .= "<option value=\"{$month}\">{$monthName}</option>\n"; } for($day=1; $day<=31; $day++) { $dayOptions .= "<option value=\"{$day}\">{$day}</option>\n"; } for($year=1900; $year<=2010; $year++) { $yearOptions .= "<option value=\"{$year}\">{$year}</option>\n"; } ?> <html> <head> <script type="text/javascript"> function updateDays() { //Create variables needed var monthSel = document.getElementById('month'); var daySel = document.getElementById('day'); var yearSel = document.getElementById('year'); var monthVal = monthSel.value; var yearVal = yearSel.value; //Determine the number of days in the month/year var daysInMonth = 31; if (monthVal==2) { daysInMonth = (yearVal%4==0 && (yearVal%100!=0 || yearVal%400==0)) ? 29 : 28; } else if (monthVal==4 || monthVal==6 || monthVal==9 || monthVal==11) { daysInMonth = 30; } //Add/remove options from days select list as needed if(daySel.options.length > daysInMonth) { //Remove excess days, if needed daySel.options.length = daysInMonth; } while (daySel.options.length != daysInMonth) { //Add additional days, if needed daySel.options[daySel.length] = new Option(daySel.length+1, daySel.length+1, false); } return; } </script> </head> <body> Birthdate:<br /> <select name="month" id="month" onchange="updateDays();"> <?php echo $monthOptions; ?> </select> <select name="day" id="day"> <?php echo $dayOptions; ?> </select> <select name="year" id="year" onchange="updateDays();"> <?php echo $yearOptions; ?> </select> </body> </html> |
||
Časová prodleva: 13 let
|
0