【发布时间】:2013-05-08 17:17:28
【问题描述】:
如果您需要可靠和准确的日期操作,您似乎不能使用strotime。例如,如果该月有 31 天,那么 strtotime 似乎只是减去了 30 天,而不是一整月。
因此,例如,如果$event["EndDate"] 等于“2013-10-31 00:00:01”,则以下代码:
echo date("Y/n/j", strtotime('-1 month', strtotime($event["EndDate"]));
输出:2013/10/1 而不是 2013/09/30。
问题:现在我怎么知道不这样做,有没有另一种更准确的方法来使 PHP 减去(或添加)整整一个月,而不仅仅是 30 天?
【问题讨论】:
-
如果您正在处理带有日期和时间的事件,那么请使用 DateTime 对象让自己的生活更轻松
-
我认为真正的问题是它从 10 月 31 日减去一个月,返回 9 月 31 日,它不存在,而是转换为 10 月 1 日。如果我在 10 月 29 日获取您的代码并将其提供给它,我会按预期得到 9 月 29 日。
-
@Blazemonger 虽然会被严重破坏。我不敢相信
strtotime()(它实际上不是 PHP 的一部分,它是一个底层通用 C 库)有这样的缺陷 -
由于 2013 年 9 月 31 日不存在,问问自己您希望返回什么。显然,9 月 31 日不是任何语言的任何日期/时间函数的可接受结果。在这种情况下,我认为您不能争辩说 9 月 30 日比 10 月 1 日更(不)正确。重要的是行为是一致的和可预测的,我相信它是,虽然我没有测试它,虽然我可能会在我有时间的时候做,因为这激起了我的好奇心。