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

PHP 取得今日、昨日、明日 00:00:00 至 23:59:59 時間戳區間函數

     編輯:PHP 相關知識

前言

報表統計、日誌查詢、定時任務常需「今日區間」、「昨日區間」、「明日區間」的精確時間戳。本文提供一個可複用函數,輸入「今日 00:00:00」時間戳,輸出三日區間陣列。

核心函數

/**
 * 取得昨日、今日、明日 的起始/結束時間戳
 * @param int $todayStart 今日 00:00:00 時間戳
 * @return array ['yesterday'=>[start,end], 'today'=>[start,end], 'tomorrow'=>[start,end]]
 */
function getThreeDayRanges(int $todayStart): array {
    $oneDay = 86400; // 24*3600

    $yesterdayStart = $todayStart - $oneDay;
    $yesterdayEnd   = $todayStart - 1;

    $todayEnd       = $todayStart + $oneDay - 1;

    $tomorrowStart  = $todayStart + $oneDay;
    $tomorrowEnd    = $tomorrowStart + $oneDay - 1;

    return [
        'yesterday' => [$yesterdayStart, $yesterdayEnd],
        'today'     => [$todayStart,     $todayEnd],
        'tomorrow'  => [$tomorrowStart,  $tomorrowEnd],
    ];
}

// 使用範例
$todayStart = strtotime(date('Y-m-d 00:00:00'));
$ranges = getThreeDayRanges($todayStart);

echo "昨日: " . date('Y-m-d H:i:s', $ranges['yesterday'][0]) . " ~ " . date('Y-m-d H:i:s', $ranges['yesterday'][1]) . "\n";
echo "今日: " . date('Y-m-d H:i:s', $ranges['today'][0])     . " ~ " . date('Y-m-d H:i:s', $ranges['today'][1])     . "\n";
echo "明日: " . date('Y-m-d H:i:s', $ranges['tomorrow'][0])  . " ~ " . date('Y-m-d H:i:s', $ranges['tomorrow'][1])  . "\n";

輸出範例 (假設今天 2024-05-20)

昨日: 2024-05-19 00:00:00 ~ 2024-05-19 23:59:59
今日: 2024-05-20 00:00:00 ~ 2024-05-20 23:59:59
明日: 2024-05-21 00:00:00 ~ 2024-05-21 23:59:59

進階:直接支援任意日期字串

function getDayRange(string $dateStr = 'today'): array {
    $start = strtotime($dateStr . ' 00:00:00');
    $end   = strtotime($dateStr . ' 23:59:59');
    return [$start, $end];
}

// 昨日
[$yStart, $yEnd] = getDayRange('yesterday');
// 明日
[$tStart, $tEnd] = getDayRange('tomorrow');

時區陷阱與解決

strtotime 依賴 PHP 預設時區。腳本開頭務必設定:

date_default_timezone_set('Asia/Shanghai'); // 或配置 php.ini date.timezone

否則在 UTC 環境下會產生偏移 8 小時的錯誤區間。

資料庫查詢應用

$range = getThreeDayRanges(strtotime(date('Y-m-d')));
$sql = "SELECT * FROM `orders` 
        WHERE `created_at` BETWEEN {$range['today'][0]} AND {$range['today'][1]}";

總結

以「今日 00:00:00」為基準,加減 86400 秒即可精確推算三日區間。封裝為函數並統一時區設定,能避免跨時區、夏令時等隱性 Bug,是日期相關業務的基礎建設。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved