$date + 1年?

118

我想要获取一个距离我指定的日期一年之后的日期。

我的代码看起来像这样:

$futureDate=date('Y-m-d', strtotime('+one year', $startDate));

它返回的日期不正确。有什么想法吗?


9
你忘了提到错误。 - BalusC
Frank Farmer:你这么确定吗?我宁愿等待OP的更正/评论。 - BalusC
在我昨晚匆忙发帖时,我忘记澄清了 - 它返回了错误的日期。抱歉!谢谢你的帮助。 - Matt
1
使用方法如下:strtotime('+1 year',$startDate); - casivaagustin
14个回答

255
$futureDate=date('Y-m-d', strtotime('+1 year'));

$futureDate距离现在一年!

$futureDate=date('Y-m-d', strtotime('+1 year', strtotime($startDate)) );

$futureDate距犻$startDate侀ćčŽć•ŠïŒ


1
请注意,如果$startDate已经是一个时间戳(例如使用time()或mktime()函数之前创建的时间戳),而不是字符串,则不应将其包装在strtotime中,否则它将无法正常工作。相反,像K Prime在下面提到的那样,执行$futureDate=date('Y-m-d',strtotime('+1 year',$startDate)); - dallin

113

要将一年加到今天的日期,请使用以下方法:

$oneYearOn = date('Y-m-d',strtotime(date("Y-m-d", mktime()) . " + 365 day"));

对于其他的示例,您必须使用时间戳值来初始化$StartingDate,例如:

$StartingDate = mktime();  // todays date as a timestamp

试试这个

$newEndingDate = date("Y-m-d", strtotime(date("Y-m-d", strtotime($StaringDate)) . " + 365 day"));
或者
$newEndingDate = date("Y-m-d", strtotime(date("Y-m-d", strtotime($StaringDate)) . " + 1 year"));

1
将“+1年”改为“+365”就可以了。谢谢! - Matt
22
这会在闰年时发生破裂吗? - WhoaItsAFactorial
1
从PHP 5.1开始,当没有参数调用mktime()函数时,会抛出E_STRICT通知:请改用time()函数。 - svandragt
为什么我的答案被踩了??$addedoneyear=date("y")+1; // 用于添加一年有什么问题吗? - pathe.kiran
因为它没有考虑闰年,所以被踩了。 - Jose' Vargas
显示剩余4条评论

15
//1 year from today's date
echo date('d-m-Y', strtotime('+1 year'));

//1 year from from specific date
echo date('22-09-Y', strtotime('+1 year'));

希望这段更简单的代码能帮助将来的某个人 :)


9
尝试使用以下代码将$startDate增加一年:$futureDate=date('Y-m-d',strtotime('+1 year',$startDate));

虽然第一个返回了正确的答案,但另一个实际上也没有返回错误……只是错误的日期。 - SeanJA
1
strtotime 不会抛出错误。如果出现错误,它将返回 false。 - Frank Farmer
如果未设置默认时区,PHP会抛出警告...然而显然这不是他的意思。 - SeanJA
我在你的代码中遇到了错误,我将,改为.,然后它就可以工作了:date("Y-m-d",strtotime('+1 year '.$startDate)); - Muhammad Bilal

7
// Declare a variable for this year 
$this_year = date("Y");
// Add 1 to the variable
$next_year = $this_year + 1;
$year_after = $this_year + 2;

// Check your code
    echo "This year is ";
    echo $this_year;
    echo "<br />";
    echo "Next year is ";
    echo $next_year;
    echo "<br />";
    echo "The year after that is ";
    echo $year_after;

7

我刚遇到过同样的问题,不过这是最简单的解决方法:

<?php (date('Y')+1).date('-m-d'); ?>

太好了,我用它来获取明年的年份:$next_year = (date('Y')+1) - Martin

7

我更喜欢面向对象的方法:

$date = new \DateTimeImmutable('today'); //'today' gives midnight, leave blank for current time.
$futureDate = $date->add(\DateInterval::createFromDateString('+1 Year'))

如果您不想修改原始日期,建议使用 DateTimeImmutable !更多关于 DateTimeImmutable 的信息请参考: http://php.net/manual/en/class.datetimeimmutable.php


如果您只需要今天的日期,可以使用以下代码:

new \DateTimeImmutable('-1 Month');

3

如果您正在使用PHP 5.3,那是因为您需要设置默认时区:

date_default_timezone_set()

3

strtotime() 返回 bool(false),因为它无法解析字符串'+one year'(它不理解"one")。然后将false隐式转换为integer时间戳0。在将其放入其他函数之前,最好先验证strtotime()的输出不是bool(false)

来自文档:

返回值

成功时返回时间戳,否则返回FALSE。在PHP 5.1.0之前,此函数会在失败时返回-1。


是的,说得好。我的生产代码会有这个,但我为了让它能够工作而苦苦挣扎,所以将代码削减到最少。谢谢! - Matt

2
你可以使用strtotime()来获取未来时间。
//strtotime('+1 day');
//strtotime('+1 week');
//strtotime('+1 month');

 $now = date('Y-m-d'); 
 $oneYearLaterFromNow = date('Y-m-d', strtotime('+1 year'));
 $oneYearLaterFromAnyDate = date('Y-m-d', strtotime('+1 year', strtotime($anyValidDateString)));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接