PHP中date_sub与DateInterval搭配使用出现时间偏移异常问题
问题根本原因
你遇到的时间偏差是日期格式化符号使用错误导致的,和date_sub的计算逻辑没有任何关系。
PHP的date_format/date函数的格式符规则里:
m代表的是带前导零的月份,取值范围是01~12- 代表带前导零的分钟的符号是
i,你代码里错误把分钟位用了m,导致你看到的“分钟”数值实际是对应日期的月份值。
对应你给出的运行结果解释
你输出的当前时间是2021-10-01 16:10:18,这里的10不是分钟,是10月;
减3天之后日期变成2021年9月28日,月份从10变成9,所以显示的“分钟”位变成了09,你误以为是少了1分钟,实际分钟数从来没有变过。
同理你把时间间隔改成P3M(间隔3个月),月份会从10直接减到7,显示的“分钟”位就变成07,和原来的10差3,你就以为是出现了3分钟偏差。
修复方案
把你所有date_format里的格式字符串从"Y-m-d H:m:s"改成"Y-m-d H:i:s"即可,重新运行就能看到date_sub的计算结果完全符合预期。
内容的提问来源于stack exchange,提问作者Duston
相关产品推荐
相关产品推荐

