商城首页欢迎来到中国正版软件门户

您的位置: 首页 > 文章列表 > 编程开发 > 如何正确使用 PHP 的 strtotime() 函数计算下一天日期

如何正确使用 PHP 的 strtotime() 函数计算下一天日期

  发布于2026-06-24 阅读(0)

扫一扫,手机访问

本文详解 strtotime() 在日期加减中的常见误用,指出 date() 函数参数顺序错误导致“+1 day”无效的问题,并提供安全、可读、符合时区规范的正确写法。

strtotime() 是 PHP 处理相对日期(比如 "+1 day"、"next Monday")时最常用的函数之一,但它的行为高度依赖传入字符串的语义完整性。一个典型的错误,就是把待处理的日期和相对偏移量拆开传递——比如下面这段代码:

// ❌ 错误写法:参数位置颠倒 + 逻辑断裂
$nextSunday = date($saturdayList[$k], strtotime("+1 day"));

这段代码实际在做什么?它把字符串 "2022-11-05" 当成了 date() 的格式参数,而 strtotime("+1 day") 返回的是当前时间加一天的时间戳——数组中指定的日期 $saturdayList[$k] 被完全忽略了。结果永远是“今天加一天”,而不是你想要的那个具体日期的下一天。

正确的做法其实很简单:把基准日期和偏移量拼接成一个完整的自然语言字符串,再交给 strtotime() 解析

$nextSunday = date('Y-m-d', strtotime($saturdayList[$k] . ' +1 day'));

这样 strtotime() 接收到的就是类似 "2022-11-05 +1 day" 的完整指令,能准确解析出目标时间戳,date() 再按 'Y-m-d' 格式输出,一切就都对了。

如果项目允许(PHP 5.2+),更推荐使用 DateTime 类——面向对象、时区安全、语义清晰:

// ✅ 使用 DateTime 类
$date = new DateTime($saturdayList[$k]);
$date->modify('+1 day');
$nextSunday = $date->format('Y-m-d');

// 或一行写法:
$nextSunday = (new DateTime($saturdayList[$k]))->modify('+1 day')->format('Y-m-d');

有几个细节值得注意:

  • strtotime() 对输入格式敏感,确保 $saturdayList[$k] 是标准 Y-m-d 格式(如 "2022-11-05"),避免含空格或非标准分隔符;
  • 如果日期来源不可信,建议先用 DateTime::createFromFormat()date_create_from_format() 验证格式;
  • strtotime() 默认使用服务器本地时区;如需 UTC 或特定时区,请显式设置(如 date_default_timezone_set('Asia/Shanghai') 或使用 DateTimeZone);
  • 数组索引 $k 需确保有效(isset($saturdayList[$k])),避免 Notice 错误。

总结一下:strtotime() 不是独立运算符,它依赖自然语言解析器——务必把“基准日期 + 偏移”组合成单个字符串传入。新项目中,优先选用 DateTime 类,它更明确、更可测试,天然支持时区与国际化需求。

本文转载于:https://www.php.cn/faq/2696476.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注