【问题标题】:add days to the next/following month using php使用php将天数添加到下个月/下个月
【发布时间】:2014-09-27 07:19:42
【问题描述】:

我在 php 中有一个使用日期函数的日期

$date =  date('Y-m-d');

我需要在下个月添加一定天数来显示截止日期。

例如:如果有人今天添加了一个5 days2014-08-04 的工作,那么截止日期应该是2014-09-06

我打算使用 date 函数获取当前月份,并将值增加 1 以进入下个月,然后在 date 函数中将天数添加到当天。

这看起来很长而且不太对

谁能告诉我实现这一目标的最佳方法是什么?

【问题讨论】:

    标签: php date date-math


    【解决方案1】:

    只需使用DateTime():

    $date = (new DateTime('2014-08-04'))->modify('next month')->modify('+5 days')->format('Y-m-d');
    

    DateInterval():

    $date = (new DateTime('2014-08-04'))->modify('next month')->add(new DateInterval('P5D'))->format('Y-m-d');
    

    或者,也许更适合您的需求:

    $days = 5;
    $date = (new DateTime())->modify('next month')->modify("{$days} days")->format('Y-m-d'); 
    

    以上两个都需要 PHP 5.4+。如果您需要将其转换为 PHP 5.3,请告诉我。

    这是上述代码的 PHP 5.3 版本:

    $days = 5;
    $date = new DateTime();
    $date->modify("next month"); 
    $date->modify("{$days} days"); 
    $date = $date->format('Y-m-d');
    

    【讨论】:

    • “例如:如果有人在 5 天内添加了今天的工作” - 看起来像是一个技巧问题。 OP 可能正在寻找 if($days_entered == 5){...} ;)
    • 看起来该值是动态的。希望这为他们指明了正确的方向。我认为确实如此。
    • 我认为也是如此。我只是不想让你被烧伤;)
    • 我的意大利橄榄色皮肤有助于保护我免受伤害:)
    • “如果您需要将其转换为 PHP 5.3,请告诉我。” - 您太客气了 ;)
    【解决方案2】:

    PHP 社区很幸运能够内置如此强大的可用功能核心。解决这个问题的方法不计其数,但最简单的往往是最好的。

    strtotime 从版本 4 开始支持。它很快。很明显。它是高度可维护的。不需要任何更复杂的东西。

    $future_stamp = strtotime('+ 1 month 5 days');
    $date = date('Y-m-d', $future_stamp);
    

    编辑:

    经过大量阅读和猜测,这可能是您真正想要的。此外,请务必阅读 strtotime 文档。你本可以想出来的。

    $future_stamp = strtotime(date('Y-m-d', strtotime('first day of next month')) . ' + 5 days');
    

    【讨论】:

    • 感谢代码,但有一个小问题。如果我将日期 2014-08-05 添加 5 天,我将需要输出为 2014-09-05 但在您的代码中它显示 2014-09-10 它还计算上个月使用的天数。知道如何将新天数添加到下个月吗?
    • @LiveEn,你不清楚。在 2014-08-05 上加上五天就是 2014-08-10。将一个月零五天添加到 2014-08-05 将是 2014-09-10。您的意思是说本月发布的任何帖子只能在下个月的第一天开始显示,再加上额外的天数(例如,5 天)?如果这是考虑到的用途,请阅读编辑。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-08
    • 2021-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-24
    • 1970-01-01
    相关资源
    最近更新 更多