可能重复:
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
问题是,我需要它使用以下规则:
在PHP中有一个常见的功能可以做到这一点,还是我必须自己编写代码?也许我只是缺少一个参数或什么!?
我知道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还应处理此案.
快乐的编码!