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

PHP 判斷上下班班次:伺服器時間 vs 客戶端時間的關鍵差異

     編輯:PHP 相關知識

需求場景

考勤、排班系統需依當前時間判斷「白班」或「夜班」。典型定義:

  • 白班:09:00 – 21:00
  • 夜班:21:00 – 次日 09:00

PHP 實作(取伺服器時間)

<?php
date_default_timezone_set('PRC'); // 設定中國時區
$hour = (int)date('H'); // 24 小時制 0-23

if ($hour >= 9 && $hour < 21) {
    echo '白班';
} else {
    echo '夜班';
}
?>

前端日期選擇器整合

<input name="riqi" class="Wdate" type="text" id="riqi"
       value="<?=date('Y-m-d')?>" />

搭配 My97DatePicker 等元件,讓使用者可查詢歷史日期班次。

關鍵差異:PHP vs JavaScript 時間來源

維度PHP (伺服端)JavaScript (客戶端)
時間來源伺服器系統時鐘使用者電腦/裝置時鐘
可信度高(受控環境)低(用戶可竄改)
時區處理統一設定 date_default_timezone_set()取決於瀏覽器/OS 設定
適用場景考勤打卡、訂單時間、日誌記錄倒數計時器、本地顯示優化

跨時區部署陷阱

若伺服器位於海外(如美國),未正確設定時區會導致班次判斷錯誤。務必在程式入口或 php.ini 設定:

date_default_timezone_set('Asia/Shanghai'); // 或 'PRC'

或修改 php.ini:

date.timezone = "Asia/Shanghai"

進階:支援自訂班次規則

function getShift($timestamp = null, $rules = []) {
    $defaultRules = [
        'day'   => ['start' => 9,  'end' => 21],
        'night' => ['start' => 21, 'end' => 9],
    ];
    $rules = array_merge($defaultRules, $rules);

    $hour = (int)date('H', $timestamp ?: time());
    return ($hour >= $rules['day']['start'] && $hour < $rules['day']['end']) ? '白班' : '夜班';
}

總結

  • PHP 取得的是伺服器時間,適合業務關鍵判斷。
  • 必須明確設定時區,避免跨區部署產生偏差。
  • 前端 JS 時間僅供參考/體驗優化,不可作為權威依據。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved