获取日期范围只知道开始日期和间隔,不包括特定日期?

时间:2014-08-22 15:05:14

标签: php datetime intervals

我需要获取一个日期列表,其范围应该是当天,直到下周的指定日期(在本例中为星期六)。

示例:

今天是friday, august 1st 2014,所以它应该从今天开始到saturday, august 9th 2014

fri, 2014-08-01
sat, 2014-08-02
(sun excluded)
mon, 2014-08-04
tue, 2014-08-05
wed, 2014-08-06
thu, 2014-08-07
fri, 2014-08-08
sat, 2014-08-09
(sun excluded)

我该如何解决这个问题?

我在考虑使用DateInterval课程,这是我到目前为止所做的:

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

$start = new DateTime($now);
$end = new DateTime($now);
$oneweek = new DateInterval('P1W');
$oneday = new DateInterval('P1D');

$days = array();

foreach(new DatePeriod($start, $oneday, $end->add($oneweek)) as $day) {
    $day_num = $day->format('N');
    if($day_num < 7) { 
        $days[$day->format('Y-m-d')] = 'valid date';
    }
}

它适用于排除星期日,但它只能在当前日期后的一周内,即7天。所以我想知道是否有办法使$end成为:&#39;下周的星期六&#39;

1 个答案:

答案 0 :(得分:0)

实际上有一种方法可以做到这一点,如果您查看DatePeriod's Manual page的评论部分,您会找到DateInterval类的使用示例&# 39; createFromDateString静态方法, jkaatz at gmx dot de (2009-07-10 01:55):

$interval = DateInterval::createFromDateString('last thursday of next month');

使用相同的方法,您可以使用以下字符串构建日期间隔:

  

下周的星期天

它可以让你获得当天(包括本周和周六)之间的所有日期,直到下周的星期六(自DatePeriod 计算最多但不包括 end 日期。)

您可以在其手册页上找到有关createFromDateString方法的更多信息,您还可以在Relative Formats Manual pages上找到有关构建区间字符串的语法,关键字和符号的更多信息,它们也被strtotime()函数和DateTime类使用。