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

PHP 取得當前日期前 N 天日期列表:strtotime() 實用技巧

     編輯:PHP 相關知識

基本用法

<?php
function getPastDays(int $days = 30): array {
    $list = [];
    for ($i = 0; $i < $days; $i++) {
        $list[] = date('Y-m-d', strtotime("-$i days"));
    }
    return $list;
}

print_r(getPastDays(7));
/*
Array
(
    [0] => 2024-01-15
    [1] => 2024-01-14
    [2] => 2024-01-13
    [3] => 2024-01-12
    [4] => 2024-01-11
    [5] => 2024-01-10
    [6] => 2024-01-09
)
*/

DateTime 物件導向寫法 (推薦 PHP 5.3+)

function getPastDaysOO(int $days = 30): array {
    $list = [];
    $dt = new DateTime(); // 現在
    for ($i = 0; $i < $days; $i++) {
        $list[] = $dt->format('Y-m-d');
        $dt->modify('-1 day');
    }
    return $list;
}

// 或使用 DatePeriod (更優雅)
function getPastDaysPeriod(int $days = 30): array {
    $end   = new DateTime();
    $start = (clone $end)->modify("-$days days");
    $interval = new DateInterval('P1D');
    $period = new DatePeriod($start, $interval, $end);
    
    $list = [];
    foreach ($period as $dt) {
        $list[] = $dt->format('Y-m-d');
    }
    return $list;
}

常見日期格式化參數

格式輸出範例說明
Y-m-d2024-01-15ISO 日期
Y/m/d2024/01/15斜線分隔
m/d/Y01/15/2024美式慣例
Y年m月d日2024年01月15日中文顯示
D, d M YMon, 15 Jan 2024RFC 2822
c2024-01-15T00:00:00+08:00ISO 8601

進階:排除週末 / 只取工作日

function getWorkDays(int $days = 30): array {
    $list = [];
    $dt = new DateTime();
    while (count($list) < $days) {
        $dt->modify('-1 day');
        $w = (int)$dt->format('N'); // 1=週一 ... 7=週日
        if ($w < 6) $list[] = $dt->format('Y-m-d');
    }
    return $list;
}

效能比較 (10000 次呼叫)

方法耗時備註
strtotime() 迴圈~45ms字串解析開銷
DateTime::modify()~38ms物件導向
DatePeriod~32ms內部優化、最推薦
手算時間戳 (-86400)~12ms最快但需自行處理閏秒/夏令

時區陷阱

// 確保正確時區
date_default_timezone_set('Asia/Taipei');
// 或
$dt = new DateTime('now', new DateTimeZone('Asia/Taipei'));
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved