需求:給定日期字符串,加 1 年得到新日期。
<?php
$data_time = "1998-12-31 23:59:59";
// PHP 計算
$new = date('Y-m-d H:i:s', strtotime('+1 year', strtotime($data_time)));
<?php
$pdo = new PDO('mysql:host=localhost;dbname=test', 'user', 'pass');
$stmt = $pdo->prepare("SELECT DATE_ADD(?, INTERVAL 1 YEAR) AS new_date");
$stmt->execute([$data_time]);
$row = $stmt->fetch();
echo $row['new_date']; // 1999-12-31 23:59:59
| 函數 | 用途 | 示例 |
|---|---|---|
| DATE_ADD(date, INTERVAL expr unit) | 加間隔 | DATE_ADD(NOW(), INTERVAL 1 MONTH) |
| DATE_SUB(date, INTERVAL expr unit) | 減間隔 | DATE_SUB(NOW(), INTERVAL 7 DAY) |
| DATEDIFF(date1, date2) | 天數差 | DATEDIFF('2024-01-15','2024-01-01')=14 |
| TIMESTAMPDIFF(unit, dt1, dt2) | 指定單位差 | TIMESTAMPDIFF(MONTH, '2023-01-01', NOW()) |
| DATE_FORMAT(date, format) | 格式化輸出 | DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i') |
| STR_TO_DATE(str, format) | 字符串轉日期 | STR_TO_DATE('15/01/2024', '%d/%m/%Y') |
| LAST_DAY(date) | 月份最後一天 | LAST_DAY('2024-02-10')=2024-02-29 |
| QUARTER(date) | 季度 | QUARTER(NOW()) |
| WEEK(date, mode) | 周數 | WEEK(NOW(), 1) |
MICROSECOND, SECOND, MINUTE, HOUR, DAY, WEEK, MONTH, QUARTER, YEAR
SECOND_MICROSECOND, MINUTE_MICROSECOND, MINUTE_SECOND, HOUR_MICROSECOND,
HOUR_SECOND, HOUR_MINUTE, DAY_MICROSECOND, DAY_SECOND, DAY_MINUTE, DAY_HOUR,
YEAR_MONTH
WHERE created_at >= DATE_SUB(NOW(), INTERVAL 1 MONTH) 可用索引;WHERE DATE(created_at) = CURDATE() 導致全表掃描。