首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 根據時間戳獲取星期幾:一行代碼實現與最佳實踐

     編輯:PHP 相關知識

核心函數

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')];
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved