【发布时间】:2016-03-02 09:06:15
【问题描述】:
在使用 PHP 的 strtotime() 函数时,我遇到了一个奇怪的问题。
$original = strtotime('2015-12-31 12:34:56');
$time = strtotime('+ 2 month', $original);
echo date('m/d/y H:i:s', $original),'<br>',date('m/d/y H:i:s', $time);
我期望得到的输出:
12/31/15 12:34:56
02/29/16 12:34:56
我实际得到的输出:
12/31/15 12:34:56
03/02/16 12:34:56
我该如何解释这个计算错误?经过相当多的调查,我意识到 PHP 平均使用 30.5 天来进行这样的计算。我并不真正关心发生这种情况的“为什么”,而是我能做些什么来解释它。我有一些想法,涉及在涉及月份计算时为 strtotime() 编写一个包装器,但这似乎是一种复杂的方法......
this question 有一个现有的答案,但问题中没有提到时间部分(只有一个日期),因此我不认为这个问题与那个问题重复。此外,我主要是寻求改进我们处理此类问题的方式,不一定是针对上述问题发布的解决方案。但是,如果我这样做是错误的,那么欢迎您删除这个问题:(
【问题讨论】:
-
因为一个月不是固定的长度...... PHP不会给你“两个月后一个月的最后一天”,它需要一个任意的月份长度,在大多数情况下(但不是全部)情况....如果您愿意,请在该月的第一天添加 2 个月,然后请求该月的最后一个日期