【问题标题】:Add 30 days to date [duplicate]迄今为止添加 30 天 [重复]
【发布时间】:2016-06-06 03:57:54
【问题描述】:

大家好,我想给我的约会增加 30 天。我正在使用下面的编码。

<?php
$next_due_date = date('05/06/2016', strtotime("+30 days"));
echo $next_due_date;
?>

但它只返回“05/06/2016”!

请帮帮我!

【问题讨论】:

  • @chris85 - 在 date('d/m/Y') 它工作得很好,因为它在今天的日期增加了 30 天

标签: php


【解决方案1】:

第一个参数是格式,不是当前日期。

<?php
$next_due_date = date('d/m/Y', strtotime("+30 days"));
echo $next_due_date;

演示:https://eval.in/583697

如果您想将30 days 添加到特定的开始日期,请使用strtotime 函数的第二个参数来告诉它从哪里开始。

如果对函数的工作方式有疑问,请参阅手册。

http://php.net/manual/en/function.strtotime.php
http://php.net/manual/en/function.date.php

【讨论】:

  • @Rahul 是的,这就是你以前所拥有的。 06/05/2016 是什么,看起来像今天/昨天的日期。如果第二个参数为空,strtotime 默认从当前日期开始。
  • @Rahul 不要使用"06/05/2016",像@chris85 说的那样使用"d/m/Y"
  • 但是它会在今天的日期上增加 30 天!!我想在我自己的日期上增加 30 天
  • @Rahul 所以您没有阅读我的答案或提供的链接?具体来自链接The timestamp which is used as a base for the calculation of relative dates. 具体来自我的回答particular starting date use the second parameter of the strtotime function to tell it where to start.
【解决方案2】:

不要不要使用php的date()函数,它不如下面的解决方案准确,而且将来也不可靠。

使用DateTime

<?php
$date = new DateTime('2016-06-06'); // Y-m-d
$date->add(new DateInterval('P30D'));
echo $date->format('Y-m-d') . "\n";
?>

您应该避免与 UNIX 时间戳(time()date()strtotime() 等)有任何关系的原因是,由于整数限制,它们将不可避免地在 2038 年份中断。

整数的最大值是2147483647 转换为Tuesday, 19 January 2038 03:14:07 所以这次来吧;这分钟;这一秒;一切都崩溃了

Source

我坚持使用 DateTime 的另一个例子是它实际上能够正确计算月份,而不管当前日期是什么:

$now = strtotime('31 December 2019');

for ($i = 1; $i <= 6; $i++) {
    echo date('d M y', strtotime('-' . $i .' month', $now)) . PHP_EOL;
}

您会得到以下日期序列:

31 December
31 November
31 October
31 September
31 August
31 July
31 June

PHP 可以方便地识别出其中三个日期是非法的,并将它们转换为最佳猜测,从而为您提供:

01 Dec 19
31 Oct 19
01 Oct 19
31 Aug 19
31 Jul 19
01 Jul 19

【讨论】:

  • 最佳答案在这里。
  • 为什么 date() 不准确和不可靠?
  • @Torben 查看更新
  • 很好的解释
【解决方案3】:

请试试这个。

echo date('m/d/Y',strtotime('+30 days',strtotime('05/06/2016'))) . PHP_EOL;

这将返回06/06/2016。我假设您的初始日期是 m/d/Y 格式。如果没有,请不要担心并使用它。

echo date('d/m/Y',strtotime('+30 days',strtotime(str_replace('/', '-', '05/06/2016')))) . PHP_EOL;

这将为您提供 d/m/Y 格式的日期,同时假设您的初始日期为 d/m/Y 格式。返回05/07/2016

如果输入日期要在mysql中,你可以直接在mysql上执行这个功能,像这样。

DATE_ADD(due_date, INTERVAL 1 MONTH);

【讨论】:

  • 我从 mysql 获取日期 $next_due_date = date('d/m/Y',strtotime('+30 days',strtotime(str_replace('/', '-', '$ userRow3["due_date"]')))) 。 PHP_EOL;这又回来了 - 1970 年 1 月 31 日
  • 如果你使用的是mysql,那么使用第一个函数。 mysql 日期的格式为 yyyy-mm-dd。第一个可以正常工作。只需将开头的格式适当地更改为 m/d/Y 或 d/m/Y。
  • 我正在从 MYSQL 获取日期并想在其中添加 30 天。如果正确,请检查以下代码:-
  • 那里不需要回声,也不需要 PHP_EOL。只需使用&lt;?php $next_due_date = date('y-m-d',strtotime('+30 days',strtotime($userRow3["due_date"]))) ; ?&gt;
  • @Rahul 所以现在你才提到 mysql,有区别,你可以用 mysql 函数来代替。
【解决方案4】:
$date = "1998-08-14";
$newdate = strtotime ( '30 day' , strtotime ( $date ) ) ;
$newdate = date ( 'Y-m-j' , $newdate );

echo $newdate;

Found the above code

【讨论】:

  • 不适用于格式 - d/m/Y
【解决方案5】:

您需要提供日期格式,例如 d/m/Y 而不是 05/06/2016

试试

$old_date = '05-06-2016';
$next_due_date = date('d-m-Y', strtotime($old_date. ' +30 days'));
echo $next_due_date;

【讨论】:

  • 但我不想要今天的日期......我有一个存储的日期,我想添加它!
  • 我已经更新了我的答案
  • 好吧,你的很不错!
  • 实际上 OP 的日期为 d/m/Y 或 m/d/Y 格式(其模棱两可)。如果格式为 d/m/Y,则此答案无效。请检查我的答案,这对两者都适用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-08
相关资源
最近更新 更多