此代码在今天(30-10-2017年)无法正常工作。为什么?
$i = 0;
$first = strtotime('first day this month');
echo date('n', strtotime("-$i month", $first));
// return 10
$i = 1;
$first = strtotime('first day this month');
echo date('n', strtotime("-$i month", $first));
// return 10 THIS IS BAD!!!!!!
$i = 2;
$first = strtotime('first day this month');
echo date('n', strtotime("-$i month", $first));
// return 8我想在$i前几个月回来。
这段代码在过去几天里正常工作..。
发布于 2017-10-30 12:30:19
相反,请尝试以下几点:
$i = 0;
$first = strtotime('first day of this month');
echo date('n', strtotime("-$i month", $first));
// return 10
$i = 1;
$first = strtotime('first day of this month');
echo date('n', strtotime("-$i month", $first));
// return 9
$i = 2;
$first = strtotime('first day of this month');
echo date('n', strtotime("-$i month", $first));
// return 8在of中添加了strtotime。
发布于 2017-10-30 12:53:41
不正确的语法“这个月的第一天”而不是“本月的第一天”被解释为"+1天“。
现在是2017年10月30日,"+1天“是2017年10月31日。
对于$i=1,strtotime("-$i月“,”本月第一天“)将在2017年10月31日之前返回。由于2017年9月31日不存在,因此返回2017年10月1日的日期。所以这个月仍然是10个月。
这就是为什么它不像今天预期的那样起作用,而是以前一直起作用的原因。
发布于 2017-10-30 12:56:37
为求澄清为何会出现这种情况:
strtotime('first day this month');此字符串在内部被视为等效于
strtotime('1 day this month');这相当于
strtotime('+1 day');由于本月的,本质上是没有意义的(总是“这个月”)。
今天,我们的日期是2017-10-31.当我们减去一个月,我们得到了2017-09-31,这不是一个有效的日期(9月只有30天)。
在内部,当您要求一个月结束后的一天,PHP转到下一个月,即2017-10-01。今天(10月30日),tomorrow -1 month实际上等于同一个月的第一天。你也会在3月底、5月底和12月底遇到这个问题,因为他们在接下来的几个月里,日数比他们少。
正如在其他答案中提到的,解决这个问题的最简单方法是添加单词of,因为这样您就会得到正确的答案。
https://stackoverflow.com/questions/47015230
复制相似问题