【问题标题】:Get a date range only knowing the starting date and an interval, excluding certain days?获取仅知道开始日期和间隔的日期范围,不包括某些日子?
【发布时间】:2014-08-22 15:05:14
【问题描述】:

我需要获取从当前日期下一周的指定日期(在本例中为星期六)的日期列表。

例子:

今天是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';
    }
}

它可以很好地排除星期日,但它最多只能在当前日期后 1 周,即 7 天。所以我想知道是否有办法让$end 类似于:'下周的星期六'

【问题讨论】:

    标签: php datetime intervals


    【解决方案1】:

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

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

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

    下周的星期日

    它可以让您获取当天(包括本周的星期六)到下周的星期六之间的所有日期(因为DatePeriod 计数最多但不包括结束日期)。

    您可以在其手册页上找到更多关于createFromDateString 方法的信息,您还可以在Relative Formats Manual pages 上找到更多关于构造区间字符串的语法、关键字和符号,@ 也使用这些信息987654325@ 函数和DateTime 类。

    【讨论】:

    • 我发现这个静态函数非常消耗内存,所以要小心。
    猜你喜欢
    • 2019-07-06
    • 1970-01-01
    • 1970-01-01
    • 2011-07-10
    • 2011-03-22
    • 1970-01-01
    • 1970-01-01
    • 2020-11-19
    • 1970-01-01
    相关资源
    最近更新 更多