PHP时间戳处理:获取今天、昨天及指定偏移时间的常用方法

小石头
小石头
发布时间:2026-10-14 | 4人浏览过
原创

在PHP开发中,准确处理日期和时间是构建应用程序的基础需求之一。无论是生成昨天的日志文件还是计算未来的计划日期,核心都依赖于对Unix时间戳的理解与转换。本文将深入探讨如何利用PHP内置的strtotime()函数以及原始时间戳运算来灵活获取不同周期的时间。

使用 strtotime() 函数进行直观计算

strtotime() 函数的强大之处在于它能智能解析人类自然语言格式的时间描述。它接受一个包含美国英语日期格式的字符串,并将其转换为自1970年1月1日以来的秒数(Unix时间戳)。若未提供第二个参数,则默认使用系统当前时间作为基准。

第1步:准备基础环境与时区设置

为了确保所有时间计算的准确性,建议在脚本开头显式设置时区,避免因服务器配置不同导致时间偏差。

<?php
date_default_timezone_set('Asia/Shanghai');

第2步:调用 strtotime 进行相对时间推算

通过传入特定的关键词,strtotime() 能够直接计算出目标时间戳,配合 date() 函数即可输出格式化后的结果。常用的相对时间表达式包括:

  • 今天/昨天/明天: 使用 "today", "yesterday", "tomorrow" 或 "+1 day", "-1 day"。
  • 周与月跨度: 使用 "+1 week", "-1 month", "+1 year" 等。
  • 特定星期: 使用 "next Thursday" (下个星期四), "last Monday" (上个周一)。
  • 复杂组合: 甚至可以组合多个单位,如 "+1 week 2 days 4 hours 2 seconds"。

第3步:编写并测试代码示例

以下是综合了上述多种场景的代码演示,展示了如何从日期到具体时刻进行格式化输出:

<?php
date_default_timezone_set('Asia/Shanghai');

// 今天
$today = date("Y-m-d");
echo "今天: " . $today . "<br>";

// 昨天 (-1 day)
echo "昨天: " . date("Y-m-d", strtotime("-1 day")) . "<br>";

// 明天 (+1 day)
echo "明天: " . date("Y-m-d", strtotime("+1 day")) . "<br>";

// 一周后
$next_week = date("Y-m-d", strtotime("+1 week"));
echo "一周后: " . $next_week . "<br>";

// 复杂的偏移量计算
$complex = date("Y-m-d G:i:s", strtotime("+1 week 2 days 4 hours 2 seconds"));
echo "一周零两天四小时两秒后: " . $complex . "<br>";

// 相对具体的星期
$next_thu = date("Y-m-d", strtotime("next Thursday"));
$last_mon = date("Y-m-d", strtotime("last Monday"));
echo "下个星期四: " . $next_thu . "<br>";
echo "上个周一: " . $last_mon . "<br>";

// 月份与年份的变化
echo "上个月: " . date("Y-m-d", strtotime("last month")) . "<br>";
echo "一个月后: " . date("Y-m-d", strtotime("+1 month")) . "<br>";
echo "十年后: " . date("Y-m-d", strtotime("+10 year")) . "<br>";

通过数学运算处理 Unix 时间戳

除了使用语义化的字符串解析,许多开发者也习惯于直接对当前的 Unix 时间戳进行加减法操作。由于一天等于86,400秒(24 × 60 × 60),这种方法的逻辑非常直观,且无需依赖特定的字符串格式。

第4步:手动计算天数偏移

首先获取当前时间戳,然后减去相应天数的秒数,最后重新格式化为可读的日期时间。

<?php
date_default_timezone_set('Asia/Shanghai');

// 昨天的日期和时间
$yesterday_str = date("Y/m/d h:i:s", time() - (24 * 60 * 60));
echo "昨天 (时间戳相减): " . $yesterday_str . "<br>";

// 前天的日期和时间
$day_before_str = date("Y/m/d h:i:s", time() - (2 * 24 * 60 * 60));
echo "前天 (时间戳相减): " . $day_before_str . "<br>";

第5步:其他快捷实现方式对比

在实际项目中,还可以结合 mktime() 函数或通过简写形式来实现相同的目的。

  • 使用 strtotime('x days ago'):
    <?php
    $date_yesterday = date("Y/m/d H:i:s", strtotime("1 days ago"));
    $date_day_before = date("Y/m/d H:i:s", strtotime("2 days ago"));
    
  • 使用 mktime() 重置部分字段:
    此方法通常用于确保获取的是当天的零点或特定时分秒,例如将日期减1但保持时分秒不变或设为特定值。
    <?php
    $yesterday_start = date("Y/m/d H:i:s", mktime(0, 0, 0, date("m"), date("d")-1, date("Y")));
    

总结

在PHP中处理日期间隔,strtotime() 提供了最优雅的读解体验,适合处理模糊的自然语言描述;而直接的时间戳算术运算则在性能和简单逻辑下具有极高的可靠性。根据具体需求选择合适的工具,可以显著提升代码的可维护性与执行效率。

以上就是PHP获取今天、昨天及不同周期时间戳的详细内容,更多关于PHP时间处理技巧的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表