Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]cal_days_in_month invalid date
Forum PHP.pl > Forum > Przedszkole
casperii
Panowie, spójrzcie proszę w poniższy kalendarz:
w linii:
  1. $days_in_this_month = cal_days_in_month(CAL_GREGORIAN, $month, $year);


oraz w linii

  1. $days_in_last_month = cal_days_in_month(CAL_GREGORIAN, $month_last, $year_last);


rzuca błędem Warning: cal_days_in_month() [function.cal-days-in-month]: invalid date. in

Problem pojawia się , gdy próbuje w kalendarzu przewinąć o kolejne 3 miesiące.

  1. function draw_cal($id_item, $month, $year, $manage_type="Wolne"){
  2. global $lang;
  3.  
  4. $month=sprintf("%02s", $month);
  5. $today_timestamp = mktime(0,0,0,date('m'),date('d'),date('Y'));
  6. $this_month = getDate(mktime(0, 0, 0, $month, 1, $year));
  7. $first_week_day = $this_month["wday"];
  8. $days_in_this_month = cal_days_in_month(CAL_GREGORIAN, $month, $year);
  9. $day_counter_tot = 0;
  10.  
  11. $month_last = $month - 1;
  12. $year_last = $year;
  13. if($month_last < 1){
  14. $month_last = 12;
  15. $year_last = $year - 1;
  16. }
  17. $days_in_last_month = cal_days_in_month(CAL_GREGORIAN, $month_last, $year_last);
  18.  
  19. if($show_week_num) $list_day_titles='<li class="weeknum_spacer"></li>';
  20.  
  21. if(AC_START_DAY=="sun"){
  22. for($k=0; $k<7; $k++){
  23. $weekday = mb_substr($lang["day_".$k.""],0,1,'UTF-8');
  24. $list_day_titles.='<li class="cal_weekday"> '.$weekday.'</li>';
  25. }
  26. }else{
  27. if ($first_week_day == 0) $first_week_day =7;
  28. for($k=1; $k<=7; $k++){
  29. if($k==7) $weekday = mb_substr($lang["day_0"][0],0,1,'UTF-8');
  30. else $weekday = mb_substr($lang["day_".$k.""],0,1,'UTF-8');
  31. $list_day_titles.='<li title="'.$lang["day_".$k.""].'"> '.$weekday.'</li>';
  32. }
  33. }
  34.  
  35. $j=1;
  36. if(AC_START_DAY=="sun")
  37. $first_week_day_start = $first_week_day; # start niedziela
  38.  
  39. else
  40. $first_week_day = $first_week_day-1; # start poniedziałek
  41.  
  42. $row_counter=0;
  43.  
  44. if($first_week_day!=7){
  45. if($show_week_num) $list_days.='<li class="weeknum">-</li>';
  46. $last_month_start_num=$days_in_last_month-$first_week_day+1;
  47. for($week_day = 0; $week_day < $first_week_day; $week_day++){
  48. $list_days.='<li class="cal_empty">'.$last_month_start_num.'</li>';
  49. ++$last_month_start_num;
  50. ++$j;
  51. ++$day_counter_tot;
  52.  
  53. if($day_counter_tot % 7==1) ++$row_counter;
  54. }
  55. }
  56. $week_day=$j;
  57.  
  58. $booked_days=array();
  59. $pdo = new db_connect();
  60. $sql = $pdo->prepare("
  61. SELECT
  62. t1.the_date,
  63. t2.class,
  64. t2.desc_pl AS the_state
  65. FROM
  66. bookings AS t1
  67. LEFT JOIN bookings_states AS t2 ON t2.id=t1.id_state
  68. WHERE
  69. t1.id_item=".$id_item."
  70. AND MONTH(t1.the_date)=".$month."
  71. AND YEAR(t1.the_date)=".$year."
  72. ");
  73. $sql->execute();
  74.  
  75. while($row = $sql->fetch()){
  76. $booked_days[$row["the_date"]]=array("class"=>$row["class"],"state"=>$row["the_state"]);
  77. }
  78.  
  79.  
  80. for($day_counter = 1; $day_counter <= $days_in_this_month; $day_counter++){
  81.  
  82. $day_classes = "";
  83. $day_title_state= " - ".$lang["available"];
  84.  
  85. $day_classes.=' clickable';
  86. $date_timestamp = mktime(0,0,0, $month,($day_counter),$year);
  87.  
  88. $week_num=date("W",$date_timestamp);
  89. if($week_num!=$last_week_num){
  90. }
  91.  
  92. if($date_timestamp==$today_timestamp) $day_classes.=' today';
  93.  
  94. $date_db = $year."-".sprintf("%02s",$month)."-".sprintf("%02s",$day_counter);
  95.  
  96. if(AC_DATE_DISPLAY_FORMAT=="pl") $date_format = $month."/".$day_counter."/".$year;
  97. else $date_format = $day_counter."/".$month."/".$year;
  98.  
  99. if(array_key_exists($date_db,$booked_days)){
  100. $day_classes.=" ".$booked_days[$date_db]["class"];
  101. $day_title_state=" - ".$booked_days[$date_db]["state"];
  102. }
  103.  
  104. if( $date_timestamp<$today_timestamp){
  105. $day_classes.=" past";
  106.  
  107. if(AC_ACTIVE_PAST_DATES=="off"){
  108. $day_classes=str_replace(' clickable','',$day_classes);
  109. }
  110. }
  111.  
  112. $getdate=getdate($date_timestamp);
  113. $day_num=$getdate["wday"]+1;
  114. if ($day_num % 7 == 1) $day_classes.=' weekend';
  115. elseif ($day_num % 6 == 1) $day_classes.=' weekend';
  116.  
  117. $list_days .= '
  118. <li class="'.$day_classes.' " id="date_'.$date_db.'" title="'.$date_format.$day_title_state.'" data-date="'.$date_format.'">'.$day_counter.'</li>';
  119.  
  120. $week_day %= 7;
  121. ++$week_day;
  122. ++$day_counter_tot;
  123.  
  124. if($show_week_num){
  125. if ($week_day==1) $list_days .= '<li class="weeknum">'.$week_num.'</li>';
  126. }
  127. $last_week_num=$week_num;
  128. if($day_counter_tot % 7==1) ++$row_counter;
  129. }
  130. $next_month_day=1;
  131.  
  132. while($row_counter<6){
  133.  
  134. for($till_day = $week_day; $till_day <=7; $till_day++){
  135. $list_days .= '<li class="cal_empty">'.$next_month_day.'</li>';
  136. ++$next_month_day;
  137. ++$day_counter_tot;
  138.  
  139. if($day_counter_tot % 7==1) ++$row_counter;
  140. }
  141. $week_day=1;
  142.  
  143. }
  144.  
  145. if($week_day > 1){
  146. for($till_day = $week_day; $till_day <=7; $till_day++){
  147. $list_days .= '<li class="cal_empty">'.$next_month_day.'</li>';
  148. ++$next_month_day;
  149. ++$day_counter_tot;
  150. }
  151. }
  152.  
  153. $the_cal='
  154. <div id="'.$month.'_'.$year.'" class="cal_title">'.$lang["month_".$month.""].' '.$year.'</div>
  155. <ul class="cal_weekday">
  156. '.$list_day_titles.'
  157. </ul>
  158. <ul>
  159. '.$list_days.'
  160. </ul>
  161. <div class="clear"></div>
  162. ';
  163. return $the_cal;
  164. }
  165.  
  166. // plik językowy
  167. include('lang/pl.lang.php');
  168.  
  169.  
  170. $id_item = $_GET['id_item'];
  171. $the_month = $_GET['month'];
  172. $the_year = $_GET['year'];
  173.  
  174.  
  175. if($id_item=="") die("no item defined");
  176. if($the_month=="") die("no month defined");
  177. if($the_year=="") die("no year defined");
  178.  
  179. // Wyświetlenie kalendarza.
  180. echo draw_cal($id_item,$the_month,$the_year);
Pyton_000
No to sprawdź sobie co pakujesz do tych funkcji, jakie wartości.
casperii
jak to co pakuje do tej funkcji:
  1. $month = 06
  2.  
  3. $year = 2017
Pyton_000
Taa??
to zrób

  1. var_dump(CAL_GREGORIAN, $month, $year);
  2. $days_in_this_month = cal_days_in_month(CAL_GREGORIAN, $month, $year);
casperii
Po załadowaniu kalendarza:
int(0) string(2) "06" string(4) "2017"
int(0) string(2) "07" string(4) "2017"
int(0) string(2) "08" string(4) "2017"

po kliknięciu w kolejne miesiące:
int(0) string(2) "51" string(4) "2018" // i tu się coś pierdzieli
int(0) string(2) "71" string(4) "2018"
int(0) string(2) "81" string(4) "2018"
Pyton_000
No widzisz... naucz się debugować swój własny kod...
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.