首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >PHP日期时间:如何修改增加和减少月份?

PHP日期时间:如何修改增加和减少月份?
EN

Stack Overflow用户
提问于 2018-03-21 00:29:34
回答 2查看 0关注 0票数 0

我一直在努力工作DateTime class,最近遇到了一些我认为是个bug的问题。经过一番研究,看起来这不是一个错误,而是按预期工作。

示例#2当加或减月份时要小心

代码语言:javascript
复制
<?php
$date = new DateTime('2000-12-31');

$date->modify('+1 month');
echo $date->format('Y-m-d') . "\n";

$date->modify('+1 month');
echo $date->format('Y-m-d') . "\n";
?>

The above example will output: 2001-01-31 2001-03-03

任何人都可以证明为什么这不被视为一个错误?

此外,是否有人有任何优雅的解决方案来纠正问题,并使其成为如此+1个月将按预期工作,而不是按预期工作?

EN

回答 2

Stack Overflow用户

发布于 2018-03-21 08:31:25

为什么它不是一个错误:

目前的行为是正确的。以下情况发生在内部:

  1. +1 month月份数(原为1)增加1。这使得日期2010-02-31
  2. 第二个月(二月)仅在2010年有28天,所以PHP会自动纠正这个问题,只是继续计算从2月1日起的日期。然后你在3月3日结束。

如何得到你想要的:

要得到你想要的是:手动检查下个月。然后添加下个月的天数。

我希望你能自己编码。我只是在做什么。

PHP 5.3方式:

为了获得正确的行为,你可以使用介绍相对时间节的PHP 5.3新功能之一first day of。此节可以组合使用next monthfifth month+8 months去指定月份的第一天。而不是+1 month从你在做什么,你可以使用下面的代码来获取下个月的第一天:

代码语言:javascript
复制
<?php
$d = new DateTime( '2010-01-31' );
$d->modify( 'first day of next month' );
echo $d->format( 'F' ), "\n";
?>

该脚本将正确输出February。当PHP处理此first day of next month节时,会发生以下情况:

  1. next month月份数(原为1)增加1。这使得日期2010-02-31。
  2. first day of将日期编号设置为1,导致日期为2010-02-01。
票数 0
EN

Stack Overflow用户

发布于 2018-03-21 09:44:21

这可能有用:

代码语言:txt
复制
echo Date("Y-m-d", strtotime("2013-01-01 +1 Month -1 Day"));
  // 2013-01-31

echo Date("Y-m-d", strtotime("2013-02-01 +1 Month -1 Day"));
  // 2013-02-28

echo Date("Y-m-d", strtotime("2013-03-01 +1 Month -1 Day"));
  // 2013-03-31

echo Date("Y-m-d", strtotime("2013-04-01 +1 Month -1 Day"));
  // 2013-04-30

echo Date("Y-m-d", strtotime("2013-05-01 +1 Month -1 Day"));
  // 2013-05-31

echo Date("Y-m-d", strtotime("2013-06-01 +1 Month -1 Day"));
  // 2013-06-30

echo Date("Y-m-d", strtotime("2013-07-01 +1 Month -1 Day"));
  // 2013-07-31

echo Date("Y-m-d", strtotime("2013-08-01 +1 Month -1 Day"));
  // 2013-08-31

echo Date("Y-m-d", strtotime("2013-09-01 +1 Month -1 Day"));
  // 2013-09-30

echo Date("Y-m-d", strtotime("2013-10-01 +1 Month -1 Day"));
  // 2013-10-31

echo Date("Y-m-d", strtotime("2013-11-01 +1 Month -1 Day"));
  // 2013-11-30

echo Date("Y-m-d", strtotime("2013-12-01 +1 Month -1 Day"));
  // 2013-12-31
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100003204

复制
相关文章

相似问题

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