首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP strtotime不能正常工作

PHP strtotime不能正常工作
EN

Stack Overflow用户
提问于 2017-10-30 12:25:33
回答 3查看 295关注 0票数 0

此代码在今天(30-10-2017年)无法正常工作。为什么?

代码语言:javascript
复制
$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前几个月回来。

这段代码在过去几天里正常工作..。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-10-30 12:30:19

相反,请尝试以下几点:

代码语言:javascript
复制
$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

票数 2
EN

Stack Overflow用户

发布于 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个月。

这就是为什么它不像今天预期的那样起作用,而是以前一直起作用的原因。

票数 0
EN

Stack Overflow用户

发布于 2017-10-30 12:56:37

为求澄清为何会出现这种情况:

代码语言:javascript
复制
strtotime('first day this month');

此字符串在内部被视为等效于

代码语言:javascript
复制
strtotime('1 day this month');

这相当于

代码语言:javascript
复制
strtotime('+1 day');

由于本月的本质上是没有意义的(总是“这个月”)。

今天,我们的日期是2017-10-31.当我们减去一个月,我们得到了2017-09-31,这不是一个有效的日期(9月只有30天)。

在内部,当您要求一个月结束后的一天,PHP转到下一个月,即2017-10-01。今天(10月30日),tomorrow -1 month实际上等于同一个月的第一天。你也会在3月底、5月底和12月底遇到这个问题,因为他们在接下来的几个月里,日数比他们少。

正如在其他答案中提到的,解决这个问题的最简单方法是添加单词of,因为这样您就会得到正确的答案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47015230

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档