0

可能重复:
将日期增加一个月

我有以下代码来总结日期:

$var1 = date("d/m/Y");
$dia = substr($var1,0,2);
$mes = substr($var1,3,2);
$a_o = substr($var1,6,4);
$date = $a_o."-".$mes."-".$dia;
$new_date = strtotime( "+3 month", strtotime($date));
$new_date = date('d/m/Y', $new_date);
echo $new_date;

这是我在 php.net 上找到的正常方法,但是当我尝试更改$var1另一个日期时,例如,'21/07/2020'结果是'31/01/1970',我不知道出了什么问题。我尝试了很多形式,但结果都是一样的。

我怎样才能解决这个问题?或者还有哪些其他形式可以将 X 个月添加到日期?

4

3 回答 3

4

查看为 5.3.0 添加的date_add()函数。

DateTime::add -- date_add — 向 DateTime 对象添加一定数量的天、月、年、小时、分钟和秒

<?php
$date = new DateTime('2000-01-01');
$date->add(new DateInterval('P10D'));
echo $date->format('Y-m-d') . "\n";
?> 

还有为 5.2.0 添加的date_modify()函数。

DateTime::modify -- date_modify -- 更改时间戳

<?php
$date = new DateTime('2006-12-12');
$date->modify('+1 day');
echo $date->format('Y-m-d');
?> 
于 2012-07-09T15:58:23.253 回答
3

你完全错了。date()给你一个格式很好的STRING。如果您想对日期进行数学运算,则需要使用原生 PHP 日期/时间值,它们是简单的整数 - unix 时间戳。

您正在获取该 unix 时间戳(中的默认值date()),将其转换为字符串,拆分该字符串,以不同的顺序重新组合字符串,然后将其转换回时间戳,然后将时间戳转换为不同格式的字符串. 这就像进行 500 英里的公路旅行,这样您就可以过马路。

任何你不能简单地做的理由:

$new_date = date('d/m/Y', strtotime('+3 month'));

并消除代码片段中的所有其他内容?

于 2012-07-09T15:59:07.123 回答
-4

在您的位置,我将转换时间戳中的日期,然后以秒为单位添加新日期(即 3 个月是 60 * 60 * 24 * 90 = 7 776 000 秒。)然后转换回日期:P

于 2012-07-09T15:59:54.893 回答