簡體   English   中英

PHP。 當用戶選擇此選項時,顯示所有12個月的日歷

[英]PHP. displaying a calendar for all 12 months when the user selects this option

我有一個包括“選擇全年”復選框的作業。 當用戶選中此框並提交時,將顯示12個日歷,每個月一個。 除了六月份,我有這個工作。 除6月外,所有日歷均顯示完美。 6月的日期不是日歷形式,而是分布在整個頁面上。 我不知道這種情況如何發生或如何解決。 我將不勝感激。

 if ($isPostBack) { $whole_year = filter_input(INPUT_POST, 'whole_year'); $select_year = filter_input(INPUT_POST, 'select_year', FILTER_VALIDATE_FLOAT); $select_month = filter_input(INPUT_POST, 'select_month', FILTER_VALIDATE_FLOAT); if ($whole_year) { $months_to_show = NUMBER_MONTH; } else { $months_to_show = 1; } $start_date = date_create_from_format('Ym-d', "{$select_year}-{$select_month}-01"); while ($months_to_show > 0) { $calendar = <<<CALENDAR <table> <tr><th colspan="7" style="text-align:center">{$start_date->format('F')} {$start_date->format('Y')}</th></tr> <tr> <th>Sun</th> <th>Mon</th> <th>Tue</th> <th>Wed</th> <th>Thu</th> <th>Fri</th> <th>Sat</th> </tr> <tr> CALENDAR; echo $calendar; $week_starts = $start_date->format('w'); for ($fillers = 0; $fillers < $week_starts; $fillers++) { echo "<td></td>"; } $day_of_week = $week_starts; for ($day_of_month = 1; $day_of_month <= $start_date->format('t'); $day_of_month++) { if ($day_of_week === 0) { echo '<tr>'; } echo "<td><a href='date.php?date={$select_year}-{$start_date->format('M')}-{$day_of_month}'>{$day_of_month}</a></td>"; if ($day_of_week === 6) { echo '</tr>'; $day_of_week = 0; } else { $day_of_week++; } } echo "</table>"; $start_date->modify('+1 month'); $months_to_show--; } } else { } ?> </body> </html> 

如果一個月的第一天是星期日,就會出現問題。 您使用相同的運算符===來檢查兩個變量的類型是否也相同。 但是,變量$week_starts首先用$start_date->format('w');初始化$start_date->format('w'); 總是返回一個字符串。 因此條件if ($day_of_week === 6)返回false 然后,PHP將何時評估$day_of_week++; ,它將變量轉換為整數。 您將擁有系列'6', 7, 8, 9, ...並且您的表行將永遠不會關閉。

如果該月的第一天不是星期日,則該變量將被強制轉換為6之前的整數,並且一切正常: '3', 4, 5, 6, 0, 1, 2, 3, ...

因此,有兩種解決方案:

  • 在開頭將$week_starts轉換為整數: $week_starts = intval($start_date->format('w'));
  • 使用簡單的等於運算符== ,它將不檢查兩個變量的類型: if ($day_of_week == 6)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM