在PHP中添加三个月的日期


88

我有一个名为$effectiveDate包含日期2012-03-26的变量。

我想在此日期之前增加三个月,但没有成功。

这是我尝试过的:

$effectiveDate = strtotime("+3 months", strtotime($effectiveDate));

$effectiveDate = strtotime(date("Y-m-d", strtotime($effectiveDate)) . "+3 months");

我究竟做错了什么?这两段代码都不起作用。


6
“无效”是什么意思?
2012年

2
我得到1340649000了答案,这似乎是正确的。
Dogbert 2012年

您确定$effectiveDate存储了您认为的存储内容吗?它对我有用
乔什

我预计该日期为2012-06-26,将3个月添加到2012-03-26
user979331

date('Y-m-d', 1340661600)给出2012-06-26正确的答案。
Tchoupi 2012年

Answers:


192

将其更改为该格式将为您提供预期的格式:

$effectiveDate = date('Y-m-d', strtotime("+3 months", strtotime($effectiveDate)));

如何应对几个月的变化?像$ months包含月份数?"+ '$months' months"不起作用
HKK

4
$offset = 5; echo date('Y-m-d', strtotime("+$offset months", strtotime('2000-01-01'))); 演示
Cees Timmerman 2014年

date()不使用本地化。更好的是strftime()。
user706420 2014年

2
不适用于这样的日期:date('2018-01-31',strtotime('+ 3 month'))。如果日期以31结尾,而接下来的3个月没有,则不会返回正确的日期。
Dan H

3
没有很好的解决方案-不返回正确的价值观-丹^ h提到
约瑟夫Vancura

17

这个答案不完全是这个问题。但我将添加此内容,因为此问题仍可搜索到如何从日期开始添加/减去期间。

$date = new DateTime('now');
$date->modify('+3 month'); // or you can use '-90 day' for deduct
$date = $date->format('Y-m-d h:i:s');
echo $date;

5

我认为“没有用”是指它给您一个时间戳,而不是格式化日期,因为您做得正确:

$effectiveDate = strtotime("+3 months", strtotime($effectiveDate)); // returns timestamp
echo date('Y-m-d',$effectiveDate); // formatted version

3

通过将strtotime()的参数连接如下,可以使Tchoupi的答案不那么冗长:

$effectiveDate = date('Y-m-d', strtotime($effectiveDate . "+3 months") );

(这依赖于魔术实现的细节,但是如果您不信任的话,您可以随时查看它们。)


2

您需要将日期转换为可读的值。您可以使用strftime()或date()。

试试这个:

$effectiveDate = strtotime("+3 months", strtotime($effectiveDate));
$effectiveDate = strftime ( '%Y-%m-%d' , $effectiveDate );
echo $effectiveDate;

这应该工作。我喜欢更好地使用strftime,因为它可以用于本地化,您可能想尝试一下。


2

以下应该可以工作,请尝试以下操作:

$effectiveDate = strtotime("+1 months", strtotime(date("y-m-d")));
echo $time = date("y/m/d", $effectiveDate);

1

以下应该工作

$d = strtotime("+1 months",strtotime("2015-05-25"));
echo   date("Y-m-d",$d); // This will print **2015-06-25** 

1

添加第n天,月和年

$n = 2;
for ($i = 0; $i <= $n; $i++){
    $d = strtotime("$i days");
    $x = strtotime("$i month");
    $y = strtotime("$i year");
    echo "Dates : ".$dates = date('d M Y', "+$d days");
    echo "<br>";
    echo "Months : ".$months = date('M Y', "+$x months");
    echo '<br>';
    echo "Years : ".$years = date('Y', "+$y years");
    echo '<br>';
}

0

以下应该可以,但是您可能需要更改格式:

echo date('l F jS, Y (m-d-Y)', strtotime('+3 months', strtotime($DateToAdjust)));
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.