核心函數
function getWeekday($timestamp): string {
if (!is_numeric($timestamp)) {
$timestamp = strtotime($timestamp);
}
$weekdays = ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'];
return $weekdays[date('w', $timestamp)];
}
使用示例
<?php
echo getWeekday(time()); // 今天星期幾
echo getWeekday('2024-01-01'); // 2024-01-01 星期一
echo getWeekday(strtotime('next Friday')); // 下周五星期幾
echo getWeekday($_SERVER['REQUEST_TIME']); // 請求時間星期幾
// 數據庫時間字段
echo getWeekday($row['created_at']);
進階版:多語言支持
function getWeekdayI18n($timestamp, string $lang = 'zh_CN'): string {
if (!is_numeric($timestamp)) $timestamp = strtotime($timestamp);
$maps = [
'zh_CN' => ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'],
'zh_TW' => ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'],
'en_US' => ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
'ja_JP' => ['日曜日', '月曜日', '火曜日', '水曜日', '木曜日', '金曜日', '土曜日'],
];
return ($maps[$lang] ?? $maps['zh_CN'])[date('w', $timestamp)];
}
DateTime 物件風格 (PHP 5.2+)
$dt = new DateTime('2024-01-01');
echo $dt->format('l'); // 英文完整:Monday
echo $dt->format('D'); // 英文縮寫:Mon
echo $dt->format('w'); // 0-6 (0=Sunday)
echo $dt->format('N'); // 1-7 (1=Monday, ISO-8601)
// 中文需自行映射
$weekdays = ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'];
echo $weekdays[$dt->format('w')];
常見場景
| 場景 | 代碼 |
| 判斷是否周末 | in_array(date('w', $ts), [0, 6]) |
| 獲取本周一日期 | date('Y-m-d', strtotime('monday this week', $ts)) |
| 獲取下周五時間戳 | strtotime('next friday', $ts) |
| 計算兩日期間工作日 | 需循環判斷或使用工作日計算庫 |
時區陷阱
// 錯誤:服務器時區與用戶不一致
date_default_timezone_set('UTC');
echo getWeekday('2024-01-01 23:00'); // 可能輸出星期二(實為用戶時區的星期一)
// 正確:統一使用 UTC 存儲,顯示時轉換
date_default_timezone_set('UTC'); // 存儲層
// 顯示層
$userTz = new DateTimeZone('Asia/Shanghai');
$dt = new DateTime('@' . $timestamp);
$dt->setTimezone($userTz);
echo $weekdays[$dt->format('w')];