如何用php撰寫行事曆撰寫程式控制星期六和日在第一欄後最後一欄排列,顯示日期?謝謝
參考 chatgpt example:
<?php
// 設定時區
date_default_timezone_set("Asia/Taipei");
// 指定月份與年份
$year = date("Y"); // 目前年份
$month = date("m"); // 目前月份
// 取得該月的第一天是星期幾
$first_day_of_month = mktime(0, 0, 0, $month, 1, $year);
$days_in_month = date("t", $first_day_of_month); // 取得該月天數
// 取得當月第一天的星期幾 (0=星期日, 1=星期一, ..., 6=星期六)
$first_weekday = date("w", $first_day_of_month);
// 定義星期名稱 (控制顯示順序: 先星期六, 接著星期一到五, 最後是星期日)
$weekdays = ["六", "一", "二", "三", "四", "五", "日"];
// 顯示行事曆標題
echo "<h2>{$year} 年 {$month} 月行事曆</h2>";
// 開始 HTML 表格
echo "<table border='1' cellpadding='5' cellspacing='0'>";
echo "<tr style='background:#ddd; text-align:center;'>";
// 顯示星期標頭
foreach ($weekdays as $day) {
echo "<th>{$day}</th>";
}
echo "</tr><tr>";
// 調整起始位置: 讓 **星期六在第一欄**
$start_position = ($first_weekday == 6) ? 0 : $first_weekday + 1;
// 在第一列的前面填充空白格
for ($i = 0; $i < $start_position; $i++) {
echo "<td></td>";
}
// 輸出每一天
for ($day = 1; $day <= $days_in_month; $day++) {
$current_weekday = date("w", mktime(0, 0, 0, $month, $day, $year));
// 控制新的一行開始 (當天是星期六時)
if ($current_weekday == 6) {
echo "<tr>";
}
// 顯示日期
echo "<td style='text-align:center;'>{$day}</td>";
// 控制結束當行 (當天是星期日時)
if ($current_weekday == 0) {
echo "</tr>";
}
}
// 在最後一列補充空白格
$end_weekday = date("w", mktime(0, 0, 0, $month, $days_in_month, $year));
if ($end_weekday != 0) {
for ($i = $end_weekday + 1; $i <= 6; $i++) {
echo "<td></td>";
}
echo "</tr>"; // 結束最後一行
}
// 結束 HTML 表格
echo "</table>";
?>
看了一下
雖然一開始有用 date_default_timezone_set
設定時區
但是 date
跟 mktime
函數的參數都是 utc 的時間
所以這個程式在臺灣時間每個月第一天 8:00 之前會顯示上個月的資料
而不是這個月的
淺水員
原來還有這樣的差異
想問一下如果設定時區後,想避開你說的
「在臺灣時間每個月第一天 8:00 之前會顯示上個月的資料」
那應該要怎麼做?
然後我問了chatgpt後
✅ 核心結論先說:
❗ 即使你已經用 date_default_timezone_set('Asia/Taipei') 設定了時區,
PHP 的 date() 和 mktime() 都會根據該時區運作,不是用 UTC!
所以我困惑誰對誰錯了XDDDD