【问题标题】:Incrementing PHP Dates递增 PHP 日期
【发布时间】:2012-02-24 21:05:51
【问题描述】:

我正在编写应用程序的一部分,用户可以在其中添加跨越多天的事件。所以我进入了 $begindate、$enddate 和 $type 的帖子。类型将是每天、每周或每月。我现在正在尝试处理每天的请求。我需要做的是在我的日期表中插入每一天的一行,包括开始日期、结束日期和中间的每一天(如果选择了每天)。由于月份显然有不同的天数,我不能简单地将 1 或 7 添加到 php 日期的日期部分,我将如何处理?

我愿意

$begindate = date('Y-m-D', strtotime($begindate))

我收到帖子的所有日期。

我没有过多地使用 PHP 日期对象,任何帮助将不胜感激。

【问题讨论】:

    标签: php sql date


    【解决方案1】:

    首先,尽可能使用DateTime 类。然后,查看DateTime::add()

    另外,DatePeriod 类可以按照您请求的时间间隔自动创建一系列 DateTime 对象,这将更容易接受不同的重复时间间隔:

    $start = new \DateTime($beginDate);
    $end = new \DateTime($endDate);
    $interval = new \DateInterval('P1D');
    $period = new \DatePeriod($start, $interval, $end);
    foreach ($period as $day) {
        // will iterate over each day in the period
    }
    

    DateTime 在它的构造函数中接受的字符串非常灵活(查看参考here),这使得从今天获取日期变得非常简单。例如,如果您想要一个代表现在一周后的 DateTime 对象,$date = new \DateTime('+1 week'); 会为您完成。

    【讨论】:

    • 太棒了,完美无瑕。我以前从未使用过 DatePeriod,非常酷。谢谢您的帮助。为什么 \'s 在 DateTime 对象声明之前?
    • 在 5.3 中将命名空间支持添加到 PHP 时,尝试从您自己的也使用命名空间的类调用 DateTime 类将引发错误,因为它会在您的命名空间中查找 DateTime 类(更多关于命名空间解析here)。前面的斜线只是告诉 PHP 在全局命名空间中查找。如果您不使用它们(或使用不支持它们的 PHP 版本),请不要使用它们。
    • 嗯,有道理。是的,我在 5.3 上,所以效果很好。再次感谢。
    【解决方案2】:
    $days = 1; // Or 7 or 30, or anything..
    $nextday = date('Y-m-D', strtotime($begindate) + 86400 * $days);
    

    或者使用DateTime 对象。

    $days = 1; // Or again 7.. or 30..
    
    $begin = new DateTime($begindate);
    $begin->add(new DateInterval('P' . $days . 'D'));
    $nextday = $date->format('Y-m-D');
    

    如果您需要增加额外的几周或几个月,请查看DateInterval 了解详情。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-05
      • 1970-01-01
      相关资源
      最近更新 更多