首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >这是PHP date() bug,还是我的代码有问题?

问这是PHP date() bug,还是我的代码有问题?
EN

Stack Overflow用户
提问于 2014-07-29 18:25:19
回答 2查看 1.3K关注 0票数 3

我有两个箭头的图像,一个是向后增加月份,另一个是通过href向前增加。

代码语言:javascript
复制
if (ISSET($_GET["month"])){
    $month_index = $_GET["month"];
}
else{
    $month_index = 0;
}
$month = strtotime("+".$month_index." month");
?>
...

<a href=<?php $month_index = $month_index - 1; echo "?month=".$month_index; ?>><img src="arrow_left.gif" ></a>
<div class="title">Logbook Calendar for <?php echo date("F Y",$month); ?> </div>
<a href=<?php $month_index = $month_index + 2; echo "?month=".$month_index; ?>><img src="arrow_right.gif"></a>

问题是,当2015年2月到来时,date()返回“2015年3月”-so $month_index =6和$month_index =7都是3月。

我在http://writecodeonline.com/php/上运行了这段代码

代码语言:javascript
复制
date_default_timezone_set("America/New_York");
$month_index = 6;
$month_index = $month_index - 1;
$month_index = $month_index + 2; 
echo $month_index;
$month = strtotime("+".$month_index." month");
echo " " . $month;
echo " " . date("F Y",$month);

将$month_index=6改为$month_index=7的结果仍在3月份得到响应。2015年2月在这里是不是有什么虫子.走了?

更新:谢谢大家。我一个人永远也找不到。我用这种方式解决了这个问题:

代码语言:javascript
复制
$month = strtotime(date("M-01-Y") . "+".$month_index." month");
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-07-29 18:27:34

这是日期是如何工作的,以及当你遇到二月和二十九日的月份或以后。当你在该年的最后一天(即今年2月28日)之后的某一天加上一个月,你就会跳过二月。无论何时迭代几个月,您都应该始终与月初一起工作,以避免跳过2月。因此,如果你从1月30日开始,加上“一个月”,因为没有2月30日,你会跳到三月。

以下是您如何在不知道二月(或关心)有多少天的情况下迭代几个月。从现在起,我选择了一个任意的结束日期。

代码语言:javascript
复制
$start    = new DateTimeImmutable('@'.mktime(0, 0, 0, $month_index, 1, 2014));
$end      = $start->modify('+1 year')
$interval = new DateInterval('P1M');
$period   = new DatePeriod($start, $interval, $end);

foreach ($period as $dt) {
    echo $dt->format('F Y');
}
票数 6
EN

Stack Overflow用户

发布于 2014-07-29 18:27:21

2015年没有2月29日。

只需一次添加或减去整个月,就可以在请求月份的同一天创建新的日期。在这种情况下,您导致PHP尝试确定2015年2月29日的日期。它自动跳到2015年3月1日。

如果您只关心月份,请在每个月的第一天创建日期:

代码语言:javascript
复制
date("F y", mktime(0,0,0, $month_index, 1, 2015));

幸运的是,你正在编写这段代码,并抓住了今天的错误,否则你会有一个错误只出现在每个月的第29(或31)个月(除了闰年)!

约会很难。

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

https://stackoverflow.com/questions/25022411

复制
相关文章

相似问题

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