$ date + 1年?


87

我正在尝试从指定的日期开始算起一年的日期。

我的代码如下所示:

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

返回错误的日期。有什么想法吗?


9
您忘记了该错误。
BalusC

弗兰克·法默:您确定吗?我宁愿等待OP的修改/评论。
BalusC,2009年

昨晚我急忙张贴,我忘了澄清-它返回了错误的日期。抱歉! 谢谢你的帮助。
马特

1
像这样用它代替strtotime('+ 1 year',$ startDate));
casivaagustin

Answers:


97

要为今天添加一年,请使用以下命令:

$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"));

添加“ +365”而不是“ +1年”。谢谢!
马特

16
万一leap年,难道不会休息吗?
Jeremy1026年

1
从PHP 5.1开始,当不带任何参数调用时,mktime()会引发E_STRICT通知:请改用time()函数。
svandragt 2014年

这里也被否决了。一天中的秒数,一年中的天数,一年中的秒数等都是可变的。如果您对“从现在开始的一年”感兴趣,则必须间隔“一年”。自行细分是导致leap日和leap秒以及夏令时变化的错误的原因。更糟糕的是,这会导致不稳定的单元测试。
drobert 2014年

为什么我的答案不满意?$ addedoneyear = date(“ y”)+ 1; //增加一年有什么问题吗?
pathe.kiran,2015年

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

$ futureDate是距离现在的一年!

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

$ futureDate是$ startDate的一年!


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

9

尝试: $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));
穆罕默德·比拉勒

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;

6

只是有同样的问题,但这是最简单的解决方案:

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

太好了,我用它来获得下一年:$next_year = (date('Y')+1)
马丁

5
//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'));

希望这段更简单的代码对以后的人们有所帮助:)


4

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

$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/zh/class.datetimeimmutable.php


如果您只想从今天开始,那么您可以随时执行以下操作:

new \DateTimeImmutable('-1 Month');

3

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

date_default_timezone_set()

3

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

从文档:

返回值

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


是的,很好。我的生产代码将具有该功能,但是我想尽一切努力使它正常工作,因此将其简化为尽可能少的代码。谢谢!
马特

2

试试这个

$nextyear  = date("M d,Y",mktime(0, 0, 0, date("m",strtotime($startDate)),   date("d",strtotime($startDate)),   date("Y",strtotime($startDate))+1));

1

还有一个更简单,更不复杂的解决方案:

$monthDay = date('m/d');
$year = date('Y')+1;
$oneYearFuture = "".$monthDay."/".$year."";
echo"The date one year in the future is: ".$oneYearFuture."";

1

我的解决方案是: date('Y-m-d', time()-60*60*24*365);

您可以通过定义使其更“可读”:

define('ONE_SECOND', 1);
define('ONE_MINUTE', 60 * ONE_SECOND);
define('ONE_HOUR',   60 * ONE_MINUTE);
define('ONE_DAY',    24 * ONE_HOUR);
define('ONE_YEAR',  365 * ONE_DAY);

date('Y-m-d', time()-ONE_YEAR);

-1

就我而言(我想在当前日期前加上3年),解决方案是:

$future_date = date('Y-m-d', strtotime("now + 3 years"));

致Gardenee,Treby和Daniel Lima:2月29日将会发生什么?有时2月只有28天:)

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.