Oto moj kalendarz:
<?php
/* problem leży na samym dole */
if (($rok == '') && ($m == '')) { // jeżeli nie ma podanych tych wartości to wyświetla aktualny miesiąc
$d_dzienTygodnia = date(w
); $d_dzienMiesiaca = date(j
);
} else {
$d_rok = $rok;
$d_miesiac = $m;
$d_dzienTygodnia = $sMiesiaca;
}
if ($d_dzienTygodnia == 0) { // od ktorego dnia miesiaca zaczac wyswietlac dane.
$d_dzienTygodnia = 7;
}
$nextM = $d_miesiac + 1;
$prevM = $d_miesiac - 1;
"1" => "Styczeń",
"2" => "Luty",
"3" => "Marzec",
"4" => "Kwiecień",
"5" => "Maj",
"6" => "Czerwiec",
"7" => "Lipiec",
"8" => "Sierpień",
"9" => "Wrzesień",
"10" => "Padziernik",
"11" => "Listopad",
"12" => "Grudzień"
);
"7" => "Nd",
"1" => "Pon",
"2" => "Wt",
"3" => "r",
"4" => "Czw",
"5" => "Pt",
"6" => "So"
);
"1" => 31,
"2" => 28,
"3" => 31,
"4" => 30,
"5" => 31,
"6" => 30,
"7" => 31,
"8" => 31,
"9" => 30,
"10" => 31,
"11" => 30,
"12" => 31
);
print "<table bgcolor='#000000' width='428' cellspacing='1' cellpadding='0'>n"; print "<td colspan='7' bgcolor='#2d6cc2' style="font
-size
: 10px
; padding
: 3px
; font
-family
: verdana
; font
-weight
: bold
; color
: #ebeaea; text-align: center">$miesiace[$d_miesiac] $d_rok</td>n"; print "<td width='60' bgcolor='#ebeaea' style="font
-size
: 10px
; font
-weight
: bold
; padding
: 3px
; font
-family
: verdana
; color
: #2d6cc2; text-align: center">$dniTygodnia[1]</td>n"; print "<td width='60' bgcolor='#ebeaea' style="font
-size
: 10px
; font
-weight
: bold
; padding
: 3px
; font
-family
: verdana
; color
: #2d6cc2; text-align: center">$dniTygodnia[2]</td>n"; print "<td width='60' bgcolor='#ebeaea' style="font
-size
: 10px
; font
-weight
: bold
; padding
: 3px
; font
-family
: verdana
; color
: #2d6cc2; text-align: center">$dniTygodnia[3]</td>n"; print "<td width='60' bgcolor='#ebeaea' style="font
-size
: 10px
; font
-weight
: bold
; padding
: 3px
; font
-family
: verdana
; color
: #2d6cc2; text-align: center">$dniTygodnia[4]</td>n"; print "<td width='60' bgcolor='#ebeaea' style="font
-size
: 10px
; font
-weight
: bold
; padding
: 3px
; font
-family
: verdana
; color
: #2d6cc2; text-align: center">$dniTygodnia[5]</td>n"; print "<td width='60' bgcolor='#ebeaea' style="font
-size
: 10px
; font
-weight
: bold
; padding
: 3px
; font
-family
: verdana
; color
: #2d6cc2; text-align: center">$dniTygodnia[6]</td>n"; print "<td width='60' bgcolor='#d9d9d9' style="font
-size
: 10px
; font
-weight
: bold
; padding
: 3px
; font
-family
: verdana
; color
: #2d6cc2; text-align: center">$dniTygodnia[7]</td>n";
// wyswietlanie dni w kalendarzu
if ($sMiesiaca == '') {
$dt = $d_dzienTygodnia;
for ($y = $d_dzienMiesiaca; $y > 1; $y--) {
if ($dt > 1) {
$dt = $dt - 1;
} else {
$dt = 7;
}
}
$sMiesiaca = $dt;
}
if (((($sMiesiaca == 6) && ($ileDni[$d_miesiac] == 31)) || ($sMiesiaca == 7)) && ($d_miesiac != 2)) {
$ile = 42;
} else {
$ile = 35;
}
print "Data: $d_dzienMiesiaca / $miesiace[$d_miesiac] / $d_rok | Start miesišca: <b>$sMiesiaca</b>; Ile komorek: $ile; $ileDni[$d_miesiac]";
// wyswietlanie dni
for ($f = 0; $f < $sMiesiaca - 1; ++$f) {
print "<td bgcolor=white></td>n";
}
for ($i = $f + 1; $i <= $ileDni[$d_miesiac] + $f; $i++) {
if (($i % 7 == 1) && ($i != '1')) {
$front = "<tr>n";
$end = "";
$nd = " bgcolor='#f4f4f4'";
} else if ($i % 7 == 0) {
$front = "";
$end = "</tr>n";
$nd = " bgcolor='#d9d9d9'";
} else {
$front = "";
$end = "";
$nd = " bgcolor='#f4f4f4'";
}
print "$front<td height='20' $nd style="font
-size
: 10px
; padding
: 3px
; font
-family
: verdana
; color
: #000000; text-align: center">";
}
$ostDzien = $i % 7;
for ($i = $i; $i <= $ile; ++$i) {
print "<td bgcolor=white></td>n";
}
/* Tutaj jest problem. Zobacz do postu */
$startPrevM = 

; // konczy sie xDniem, trwa yDni gdzie: xDzien = $sMiesiac - 1; yDni = $ileDni[$dmiesiac-1]; $startNextM = $ostDzien;
print "<td colspan='3' bgcolor='#7da7e0' style="font
-size
: 10px
; padding
: 3px
; font
-family
: verdana
; text
-align
: center
"><a href=?sMiesiaca=$startPrevM&m=$prevM><<Poprzedni Miesišc</a></td>"; print "<td bgcolor='#ffffff'></td>"; print "<td colspan='3' bgcolor='#7da7e0' style="font
-size
: 10px
; padding
: 3px
; font
-family
: verdana
; text
-align
: center
"><a href=?sMiesiaca=$startNextM&m=$nextM>Następny Miesišc>></td>";
?>
I mam problem. Jak odczytać numer dnia tygodnia w którym to dniu zaczyna się miesiąc poprzedzający?
Próbowałem już kilka godzin i nic.
Myślałem, że np:
1. W miesiącu A dzień rozpoczyna się dniem w tygodniu o numerze X gdzie x należy do 1 - 7;
2. Miesiąc A-1 (numer miesiąca) ma Y dni (jeśli A = 1 to A-1 = 12)
3. Toznaczy że miesiąc A-1 zaczyna się w dniu:
$startPrevM = (Y + X) % 7;
4. to nie koniec
$startPrevM musimy jeszcze uwzględnić liczbę dni. Gdyż przy dzieleniu przez 7 wyjdzie nam reszta równa:
0 == ze miesiac A-1 zacznie sie w tym samy,m dniu tygodnia co miesiac A (dotyczy tylko lutego, nie przestepnego)
1 = oznacza ze miesiac A-1 rozpocznie sie dzien wczesniej itd
2
3
4
5
6
I wtedy trzeba odpowiednio poprzesuwać zmienna X czyli dzień tygodnia (czyli im mniej dni.
Niestety tak nie działa albo zle kombinuje. Poradzcie prosze:)
Ten post edytował Fistach 23.09.2006, 10:50:28