Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]Kalendarz php, problem z odczytem dnia, od którego zaczyna się poprz. miesiąc
Forum PHP.pl > Forum > PHP
Fistach
Oto moj kalendarz:

  1. <?php
  2. /* problem leży na samym dole */
  3.  
  4.  
  5.  
  6. if (($rok == '') && ($m == '')) { // jeżeli nie ma podanych tych wartości to wyświetla aktualny miesiąc
  7.  
  8. $d_rok = date(Y);
  9. $d_miesiac = date(n);
  10. $d_dzienTygodnia = date(w);
  11. $d_dzienMiesiaca = date(j);
  12.  
  13. } else {
  14.  
  15. $d_rok = $rok;
  16. $d_miesiac = $m;
  17. $d_dzienTygodnia = $sMiesiaca;
  18.  
  19. }
  20.  
  21. if ($d_dzienTygodnia == 0) {  // od ktorego dnia miesiaca zaczac wyswietlac dane.
  22.  
  23. $d_dzienTygodnia = 7;
  24.  
  25. }
  26.  
  27. $nextM = $d_miesiac + 1;
  28. $prevM = $d_miesiac - 1;
  29.  
  30. $miesiace = array (
  31. "1" => "Styczeń",
  32. "2" => "Luty",
  33. "3" => "Marzec",
  34. "4" => "Kwiecień",
  35. "5" => "Maj",
  36. "6" => "Czerwiec",
  37. "7" => "Lipiec",
  38. "8" => "Sierpień",
  39. "9" => "Wrzesień",
  40. "10" => "PaŸdziernik",
  41. "11" => "Listopad",
  42. "12" => "Grudzień"
  43. );
  44.  
  45. $dniTygodnia = array(
  46.  
  47. "7" => "Nd",
  48. "1" => "Pon",
  49. "2" => "Wt",
  50. "3" => "Œr",
  51. "4" => "Czw",
  52. "5" => "Pt",
  53. "6" => "So"
  54.  
  55. );
  56.  
  57. $ileDni = array (
  58.  
  59. "1" => 31,
  60. "2" => 28,
  61. "3" => 31,
  62. "4" => 30,
  63. "5" => 31,
  64. "6" => 30,
  65. "7" => 31,
  66. "8" => 31,
  67. "9" => 30,
  68. "10" => 31,
  69. "11" => 30,
  70. "12" => 31 
  71.  
  72. );
  73.  
  74. print "<table bgcolor='#000000' width='428' cellspacing='1' cellpadding='0'>n";
  75. print "<tr>n";
  76. 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";
  77. print "</tr>n";
  78. print "<tr>n";
  79. 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";
  80. 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";
  81. 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";
  82. 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";
  83. 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";
  84. 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";
  85. 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";
  86. print "</tr>n";
  87.  
  88. // wyswietlanie dni w kalendarzu
  89.  
  90. if ($sMiesiaca == '') {
  91.  
  92. $dt = $d_dzienTygodnia;
  93.  
  94.  
  95. for ($y = $d_dzienMiesiaca; $y > 1; $y--) {
  96.  
  97. if ($dt > 1) {
  98.  
  99. $dt = $dt - 1;
  100.  
  101. } else {
  102.  
  103. $dt = 7;
  104.  
  105. }
  106.  
  107. }
  108.  
  109. $sMiesiaca = $dt;
  110.  
  111. }
  112.  
  113. if (((($sMiesiaca == 6) && ($ileDni[$d_miesiac] == 31)) || ($sMiesiaca == 7)) && ($d_miesiac != 2)) {
  114.  
  115. $ile = 42;
  116.  
  117. } else {
  118.  
  119. $ile = 35;
  120.  
  121. }
  122.  
  123. print "Data: $d_dzienMiesiaca / $miesiace[$d_miesiac] / $d_rok | Start miesišca: <b>$sMiesiaca</b>; Ile komorek: $ile; $ileDni[$d_miesiac]";
  124.  
  125. // wyswietlanie dni
  126.  
  127. print "<tr>";
  128.  
  129. for ($f = 0; $f < $sMiesiaca - 1; ++$f) {
  130.  
  131. print "<td bgcolor=white></td>n";
  132.  
  133.  
  134. }
  135.  
  136.  
  137. for ($i = $f + 1; $i <= $ileDni[$d_miesiac] + $f; $i++) {
  138.  
  139. if (($i % 7 == 1) && ($i != '1')) {
  140.  
  141. $front = "<tr>n";
  142. $end = "";
  143. $nd = " bgcolor='#f4f4f4'"; 
  144. } else if ($i % 7 == 0) {
  145.  
  146. $front = "";
  147. $end = "</tr>n";
  148. $nd = " bgcolor='#d9d9d9'";
  149.  
  150. } else {
  151.  
  152. $front = "";
  153. $end = "";
  154. $nd = " bgcolor='#f4f4f4'"; 
  155.  
  156. }
  157.  
  158. print "$front<td height='20' $nd style="font-size: 10px; padding: 3px; font-family: verdana; color: #000000; text-align: center">";
  159. print $i - $f;
  160. print "</td>$endn";
  161.  
  162. }
  163.  
  164. $ostDzien = $i % 7;
  165.  
  166. for ($i = $i; $i <= $ile; ++$i) {
  167.  
  168. print "<td bgcolor=white></td>n";
  169.  
  170. }
  171.  
  172.  
  173. /* Tutaj jest problem. Zobacz do postu */
  174.  
  175.  
  176. $startPrevM = questionmark.gifquestionmark.gifquestionmark.gif; // konczy sie xDniem, trwa yDni gdzie: xDzien = $sMiesiac - 1; yDni = $ileDni[$dmiesiac-1];
  177. $startNextM = $ostDzien;
  178.  
  179. print "<tr>";
  180. 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>"; 
  181. print "<td bgcolor='#ffffff'></td>";
  182. 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>"; 
  183. print "</tr>";
  184.  
  185. print "</table>n";
  186. ?>


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:)
nospor
  1. <?php
  2. $data = '2006-09-23';
  3. $poprzednimiesiac = date('Y-m',strtotime('-1 month', strtotime($data)));
  4. echo 'Poprzedni miesiac rozpoczyna sie w: '.date('w', strtotime($poprzednimiesiac.'-01'));
  5. ?>
jezoo
dam Ci gotowca smile.gif u mnie smiga -> http://jerzyk.info
  1. <?php
  2. class Calendar {
  3.  
  4.  
  5.  
  6.  
  7. public function tabCal() {
  8. $lang=$_SESSION['lang'];
  9. $nameDay = array('Nd'=>'Sun','Pon'=>'Mon','Wt'=>'Tue',"Śr"=>'Wed','Czw'=>'Thu','Pt'=>'Fri','Sob'=>'Sat');
  10. $monthName = array('Stycze&#324','Luty','Marzec','Kwiecień','Maj','Czerwiec','Lipiec','Sierpień',
  11. 'Wrzesie&#324','Październik','Listopad','Grudzień');
  12.  
  13. $now = getdate(time());
  14. $time = mktime(0,0,0, $now['mon'], 1, $now['year']);
  15. $date = getdate($time);
  16. $dayTotal = cal_days_in_month(0, $date['mon'], $date['year']);
  17. //Print the calendar header with the month name.
  18.  
  19. // My modyfication
  20. if($lang == 'pl,en-us;q=0.7,en;q=0.3' || $lang=='pl')
  21. {print '<table><tr><td colspan="7"><strong>' . $monthName[date('n')-1] . '</strong></td></tr>'; }
  22. else { print '<table><tr><td colspan="7"><strong>' . $date['month'] . '</strong></td></tr>';}
  23.  
  24. echo "<tr>";
  25. foreach($nameDay as $pl => $en) {
  26. if($lang == 'pl,en-us;q=0.7,en;q=0.3'||$lang=='pl') {
  27. echo "<th>".$pl."</th>"; }
  28. else {
  29. echo "<th>".$en."</th>"; }
  30. }
  31.  
  32. echo "</tr>";
  33. //------------------------------
  34. for ($i = 0; $i < 6; $i++) {
  35. print '<tr>';
  36. for ($j = 1; $j <= 7; $j++) {
  37. $dayNum = $j + $i*- $date['wday'];
  38. //Print a cell with the day number in it. If it is today, highlight it.
  39. print '<td';
  40. if ($dayNum > 0 && $dayNum <= $dayTotal) {
  41. print ($dayNum == $now['mday']) ? ' style="background #ccc;">' : '>';
  42. print $dayNum;
  43. }
  44. else {
  45. //Print a blank cell if no date falls on that day, but the row is unfinished.
  46. print '>';
  47. }
  48. print '</td>';
  49. }
  50. print '</tr>';
  51. if ($dayNum >= $dayTotal && $i != 6)
  52. break;
  53. }
  54. print '</table>';
  55. }
  56. }
  57. ?>

a co do miesiecy to musisz tylko odpowiednia zmienna dodac i ma dzialac smile.gif
z tym to chyba sobie juz poradzisz
Fistach
Działa ! Dzięki Nospor dobry pomysł przyznaję.

Jezoo wole sam napisac ale rowniez dziekuje bo przejrzałem Twój kodzik i też fajny.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.