<!DOCTYPE html> <html lang="pl"> <head> <meta charset="utf-8" /> <link rel="stylesheet" href="styles.css" type="text/css" media="screen" /> <link rel="stylesheet" type="text/css" href="print.css" media="print" /> <!--[if IE]><script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script><![endif]--> <script type="text/javascript"> <!--Tutaj jest kod kalendarza --> </script> </head> <body> <div id="kalendarz"> <script type="text/javascript"> document.write(kalend(5,9,2011)); </script> </div>
Kod kalendarza wstawiany na miejsce komentarza wygląda tak:
function kalend(dzien,mies,rok) { var data = new Date(rok,mies,dzien); var kod = ""; rok = data.getFullYear()+""; //Konwersja zmiennej typu NUMBER do typu STRING var miesiace = new Array(); miesiace[0]=31; //Luty musimy niestety przetestować pod kątem przestępności roku. if (rok.substr(0,2)=='00') { parseInt(rok)%400==0 ? miesiace[1]=29 : miesiace[1]=28; } else { parseInt(rok)%4==0 ? miesiace[1]=29 : miesiace[1]=28; } miesiace[2]=31; miesiace[3]=30; miesiace[4]=31; miesiace[5]=30; miesiace[6]=31; miesiace[7]=31; miesiace[8]=30; miesiace[9]=31; miesiace[10]=30; miesiace[11]=31; var nazwy_m = new Array(); nazwy_m[0]="Styczeń"; nazwy_m[1]="Luty"; nazwy_m[2]="Marzec"; nazwy_m[3]="Kwiecień"; nazwy_m[4]="Maj"; nazwy_m[5]="Czerwiec"; nazwy_m[6]="Lipiec"; nazwy_m[7]="Sierpień"; nazwy_m[8]="Wrzesień"; nazwy_m[9]="Październik"; nazwy_m[10]="Listopad"; nazwy_m[11]="Grudzień"; kod += nazwy_m[mies]+" "+rok; kod += "<table border=\"1\"><th>Pn</th><th>Wt</th><th>Śr</th><th>Czw</th><th>Pt</th><th>So</th><th>Ndz</th></tr>"; //Szukamy, którym dniem tygodnia był pierwszy dzień miesiąca. data.setDate(1); var pierwszy = data.getDay(); var pula = miesiace[data.getMonth()]; //Pierwszy wers, w którym mogą wystąpić wolne (!!!) pola. kod += "<tr>"; for (var i=1;i<=7;i++) { if (i<pierwszy) kod += "<td> </td>"; else { kod += "<td id='"+(i-pierwszy+1)+"_"+(mies+1)+"_"+rok+"'>"+(i-pierwszy+1)+"</td>"; pula -= 1; } } for (var j=(miesiace[data.getMonth()]-pula+1),ost_niedz=j-1;j<=miesiace[data.getMonth()];j++) { if ((j-ost_niedz)%7==0) kod += "<td id='"+j+"_"+(mies+1)+"_"+rok+"'>"+j+"</td></tr>"; else if ((j-ost_niedz)%7==1) kod += "<tr><td id='"+j+"_"+(mies+1)+"_"+rok+"'>"+j+"</td>"; else kod += "<td id='"+j+"_"+(mies+1)+"_"+rok+"'>"+j+"</td>"; } kod += "</tr></table>"; kod += " <a href=\"#\" onClick=\"document.getElementById('kalendarz').innerHTML=kalend(1,"+(data.getMonth()-1)+","+rok+");oznacz();\">Poprzedni</a> "; kod += "<a href=\"#\" onClick=\"document.getElementById('kalendarz').innerHTML=kalend(1,"+(data.getMonth()+1)+","+rok+");oznacz();\">Następny</a>"; return kod; }
Wszystko fajnie... Z dwoma wyjątkami:
1. Przy klikaniu przycisku "Poprzedni" kiedy wyświetla się grudzień, zamiast "Grudzień 2011" pojawia się "undefined 2011", przy klikaniu przycisku "Następny" taka sytuacja zachodzi przy styczniu (pozostałe miesiące pracują poprawnie).
2. Poważniejszy problem to taki, że kiedy pierwszy dzień miesiąca wypada w niedzielę, to kalendarz wyświetlany jest bez pierwszego wersu - pierwszy wyświetlany wers zaczyna się od drugiego dnia. Można to zobaczyć tutaj: http://imageshack.us/photo/my-images/59/ka...ierwszegod.jpg/
Czy ktoś wie, gdzie jest pies pogrzebany?