php – 使用DateInterval和DateTime :: add添加月份时会出现什么问题?

我没能找到解决这个问题的正确方法.正如您在 PHP文档中的示例#3中看到的那样,他们使用DateTime :: add中的DateInterval声明了 one must beware when adding months.

对于为什么方法的行为是这样的以及我可以做些什么来避免这种情况,我没有任何解释,我发现这是一个错误.

有人对此有所了解吗?

问题是每个月可能有不同的天数.问题是,当您想将日期增加1个月时,您正在做什么.根据PHP文档,如果您在1月31日(或30日)并且您添加1个月,那么预期的行为是什么?

二月只有29天.你想成为这个月的最后一天吗?如果这是您正在寻找的,或者基于当前日期的静态日期,您通常会在一定天数内增加安全性.当你增加月份时不知道你想要完成什么,很难说如何观察错误.

编辑:
正如有人在上面提到的Mike B评论的类似帖子中提到的那样,你可能想要做一些事情(在伪代码中):

1) Use cal_days_in_month() for the next month and save that number to a variable x
 2) If x >= current billing dob,increment and be done
 3) DateTime::modify('last day')  (havent used this before but something along these lines) to set the date to the last date of the next month (set it to the 1st of the next month,then last day?)

值得注意的是,如果您在此处使用变量作为新的结算值,您将清除原始值.我会保存一个额外的DB值,即“第一个开票日期”或者只是“billing_day_of_month”或者其他东西,然后使用它来计算出你应该关注的那个月的日期

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...