相关疑难解决方法(0)

如何在没有跳过的日期添加1个月即2月

可能重复:
PHP DateTime ::修改添加和减去月份

我有一个开始日期(即2011-01-30),并希望增加1个月.

问题在于定义一个月是什么.所以,如果我使用以下代码:

$d1 = DateTime::createFromFormat('Y-m-d H:i:s', '2011-01-30 15:57:57');
$d1->add(new DateInterval('P1M'));
echo $d1->format('Y-m-d H:i:s');
Run Code Online (Sandbox Code Playgroud)

我得到以下结果:2011-03-02 15:57:57

问题是,我需要它使用以下规则:

  • 如果我加1个月它只会在月份部分添加1并留下一天部分(2011-01-15将成为2011-02-15)
  • 如果当天不存在我们将结束的那天,我们将采取最后一天(2011-01-30将成为2011-02-28)

在PHP中有一个常见的功能可以做到这一点,还是我必须自己编写代码?也许我只是缺少一个参数或什么!?

php datetime

20
推荐指数
2
解决办法
4万
查看次数

PHP strtotime +1个月的行为

我知道PHP函数的不良行为

的strtotime

例如,将日期(+1个月)添加到日期,例如:31.01.2011 - > 03.03.2011

知道这不是正式的PHP错误,并且这个解决方案背后有一些论据,但至少对我来说,这种行为造成了很多浪费时间(在过去和现在),我个人讨厌它.


我发现甚至更奇怪的是,例如:

MySQL: DATE_ADD('2011-01-31',INTERVAL 1 MONTH)返回2011-02-28或

C# where new DateTime(2011,01,31).AddMonths(1); 将于28.02.2011返回

wolframalpha.com给予31.01.2013 + 1 month作为输入; 将于2013年2月28日星期四返回

它向我看到其他人已经找到了一个更好的解决方案,我在PHP错误报告中看到了很多愚蠢的问题,"如果我说我们会在一个月后见面会是什么日子"或类似的东西.答案是:如果下个月不存在31,请告诉我那个月的最后一天,但请坚持下个月.


所以我的问题是:是否有一个PHP函数(由某人编写)解决了这个没有官方认可的错误?因为我不认为我是唯一一个在添加/减去月份时想要另一种行为的人.

我特别感兴趣的是解决方案,它不仅适用于本月底,而且完全取代了strtotime.此外,strotime +n months还应处理此案.

快乐的编码!

php strtotime

18
推荐指数
3
解决办法
9375
查看次数

标签 统计

php ×2

datetime ×1

strtotime ×1