Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/236.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP5.1中添加月份的准确方法?_Php_Strtotime - Fatal编程技术网

在PHP5.1中添加月份的准确方法?

在PHP5.1中添加月份的准确方法?,php,strtotime,Php,Strtotime,昨天我遇到了一个问题,PHP的strotime没有正确地添加一个月。2011年5月31日,我跑了: date('Y-m-d',strtotime( '+1 month', strtotime('now'))); 当我期待“2011-06-30”时,返回“2011-07-01” MySQL这样做没有任何问题 我不想用这个来重新发明轮子,因为根据我的经验,日期计算很容易出错 是否有人为PHP5.1提供了可靠且经过测试的解决方案?在PHP中,这当然是可能的:请检查 如果您有可用的MySQL连接,SE

昨天我遇到了一个问题,PHP的strotime没有正确地添加一个月。2011年5月31日,我跑了:

date('Y-m-d',strtotime( '+1 month', strtotime('now')));
当我期待“2011-06-30”时,返回“2011-07-01”

MySQL这样做没有任何问题

我不想用这个来重新发明轮子,因为根据我的经验,日期计算很容易出错


是否有人为PHP5.1提供了可靠且经过测试的解决方案?

在PHP中,这当然是可能的:请检查


如果您有可用的MySQL连接,
SELECT DATE\u ADD('2011-05-31',INTERVAL 1 MONTH)
将减少冗余,因为(正确的)功能已经实现,而您无需自己实现。

您可能认为PHP做的是正确的,而MySQL做的是错误的:


MySQL将该值限制在符合年/月定义的最后一个有效日期。PHP向上调整,向前移动到与指定日期匹配的第一个适当日期(31-30=过去一天,因此2011-06-30+1天=2011-07-01)。

添加
+2592000秒(60×60×24×30)对我来说是理想的方式。

你可以比较
strotime('1个月的最后一天',strotime('now')的结果
使用strotime(“+1个月”,strotime('now'))
,并使用较早的一个。

由于这似乎是一个相当令人困惑的主题,以下是有关它的一些信息:

你实际上得到了一个准确的结果,它实际上是增加了1个月,日期仍然是31,因此日期是2011-06-31。如果你做了
echo日期('Y-m-d',strottime('2011-06-31')您将看到它显示
2011-07-01

这里有一种方法可以使这项工作在PHP5.1(及之前版本)中达到“预期”效果 下个月的函数($timestamp) { $next_month=日期('m',$timestamp); $next_month++; $next_year=日期('Y',$timestamp); 如果($next_month==12) { $next_year++; } if(日期('d',$timestamp) 这将解决您的问题。

尝试使用:

$date = date_create("1900-01-01"); // Your start date
$new_date = date_add($date, date_interval_create_from_date_string('1 month')); // Your end date

你设置了正确的区域设置了吗?如果你想在PHP中获得更好的覆盖率,那么这个课程将是值得冒险的。这个问题的答案看起来应该可以解决你的问题:这是100%正确的,它增加了1个月,但6月只有30天,因此第31天是8月1日。在我问了一段时间的问题中,简洁的回答返回:DateTime对象是PHP5.2,我特别要求提供PHP5.1解决方案。我的区域设置为正确的时区。谢谢,我从不知道这是可用的。很高兴我回答了这个问题。如果我必须选择MySQl、Sql Server、Javascript等与PHP的哪一方是正确的,在这种情况下我不会选择PHP。2月呢?1月31日st+30天让你进入3月,完全跳过2月。这有一个类似的问题,但增加了30天而不是31天
For other Months : date('Y-m-t',strtotime("2015-05-31T23:59:59 -3 days +1 month"));
Output           : 2015-06-30

For Feb          : date('Y-m-t',strtotime("2015-01-31T23:59:59 -3 days +1 month"));
Output           : 2015-02-28
$date = date_create("1900-01-01"); // Your start date
$new_date = date_add($date, date_interval_create_from_date_string('1 month')); // Your end date