包括最后一个日期在内的两个日期之间的 20 天时间段

曼努埃尔23

我需要以 20 天的间隔遍历两个日期之间的天数,包括最后一个日期。例如,在日期 2019/01/01 和 2019/01/27 之间应返回以下范围:

2019-01-01  =>  2019-01-20
2019-01-21  =>  2019-02-09
2019-02-10  =>  2019-02-27

我试过这个代码:

$start = new DateTime('2019-01-01');
$end = new DateTime('2019-02-27');
$interval = new DateInterval('P20D');
$period = new DatePeriod($start, $interval, $end, DatePeriod::EXCLUDE_START_DATE);

$from = $start->format('Y-m-d');
foreach ($period as $day) {
    $to = $day->format('Y-m-d');

    echo $from . '  =>  ' . $to . '<br>';

    $from = $day->modify('+1 day')->format('Y-m-d');
}

输出:

2019-01-01  =>  2019-01-21
2019-01-22  =>  2019-02-10

这段代码有两个问题,不包括最后一期(不再包含20天),提前一天。我该如何解决这些问题?

缺口

这可能更简单地通过将$start增加$interval直到它大于该$end值。请注意,间隔需要 19 天才能构成 20 天(包括开始和结束)的时间段。

$start = new DateTime('2019-01-01');
$end = new DateTime('2019-02-27');
$interval = new DateInterval('P19D');
while ($start < $end) {
    echo $start->format('Y-m-d') . ' => ';
    $start->add($interval);
    echo min($start, $end)->format('Y-m-d') . "\n";
    $start->add(new DateInterval('P1D'));
}

输出:

2019-01-01 => 2019-01-20 
2019-01-21 => 2019-02-09
2019-02-10 => 2019-02-27

3v4l.org 上的演示

更新

这是一个也跳过周末的代码版本:

$start = new DateTime('2019-01-01');
$end = new DateTime('2019-02-27');
$interval = new DateInterval('P1D');
$days = 19;
while ($start < $end) {
    echo $start->format('Y-m-d') . ' => ';
    for ($i = 0; $i < $days; ) {
        $start->add($interval);
        $day_of_week = $start->format('N');
        if ($day_of_week == 6 || $day_of_week == 7) continue;
        $i++;
    }
    echo min($start, $end)->format('Y-m-d') . "\n";
    $start->add($interval);
}

3v4l.org 上的演示

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

vb net 排除两个日期时间之间的时间段

来自分类Dev

在 Postgresql 中生成两个日期之间的一系列时间范围(重复时间段)

来自分类Dev

mongodb:查询两个日期字段之间的时间段

来自分类Dev

在R中,如何根据两个日期之间的时间段合并数据帧?

来自分类Dev

C#Linq如何枚举两个日期之间的时间段以获取图表数据

来自分类Dev

如何计算两个时间段之间的时间?

来自分类Dev

访问VBA,检查两个日期字段之间的时间段未超过特定日期

来自分类Dev

访问VBA,检查两个日期字段之间的时间段未超过特定日期

来自分类Dev

Jodatime中的错误会计算两个日期范围之间的时间段(每年近似)

来自分类Dev

Bash脚本,可以打印两个iso8601时间段之间的所有日期

来自分类Dev

如何获取日期字段的时间段

来自分类Dev

使用 moment.js 获取两个日期之间的所有时间段(并排除一些)(无限循环问题?)

来自分类Dev

从两个日期时间之间的时差返回另一个时间

来自分类Dev

熊猫:比较两个时间段的总和?

来自分类Dev

加入两个时间段相交的地方

来自分类Dev

TimePeriodLibrary 将两个时间段相交

来自分类Dev

检查日期是否在另一个时间段中已经存在

来自分类Dev

检查日期是否在另一个时间段中已经存在

来自分类Dev

JS时间-为两个日期之间的每年建立一个数组

来自分类Dev

获取时间段之间的小时数

来自分类Dev

返回时间段之间的绝对差

来自分类Dev

获取时间段之间的小时数

来自分类Dev

如何使用Linq获取不在某个时间段内驻留的前两个连续日期时间点?

来自分类Dev

每个时间段的唯一值

来自分类Dev

ggplot中每个时间段的日期之间的阴影

来自分类Dev

两个日期时间之间的差

来自分类Dev

PHP的两个日期之间的时间是

来自分类Dev

将时间序列除以日期时间段?

来自分类Dev

如何计算两个时间段之间的小时和分钟?

Related 相关文章

  1. 1

    vb net 排除两个日期时间之间的时间段

  2. 2

    在 Postgresql 中生成两个日期之间的一系列时间范围(重复时间段)

  3. 3

    mongodb:查询两个日期字段之间的时间段

  4. 4

    在R中,如何根据两个日期之间的时间段合并数据帧?

  5. 5

    C#Linq如何枚举两个日期之间的时间段以获取图表数据

  6. 6

    如何计算两个时间段之间的时间?

  7. 7

    访问VBA,检查两个日期字段之间的时间段未超过特定日期

  8. 8

    访问VBA,检查两个日期字段之间的时间段未超过特定日期

  9. 9

    Jodatime中的错误会计算两个日期范围之间的时间段(每年近似)

  10. 10

    Bash脚本,可以打印两个iso8601时间段之间的所有日期

  11. 11

    如何获取日期字段的时间段

  12. 12

    使用 moment.js 获取两个日期之间的所有时间段(并排除一些)(无限循环问题?)

  13. 13

    从两个日期时间之间的时差返回另一个时间

  14. 14

    熊猫:比较两个时间段的总和?

  15. 15

    加入两个时间段相交的地方

  16. 16

    TimePeriodLibrary 将两个时间段相交

  17. 17

    检查日期是否在另一个时间段中已经存在

  18. 18

    检查日期是否在另一个时间段中已经存在

  19. 19

    JS时间-为两个日期之间的每年建立一个数组

  20. 20

    获取时间段之间的小时数

  21. 21

    返回时间段之间的绝对差

  22. 22

    获取时间段之间的小时数

  23. 23

    如何使用Linq获取不在某个时间段内驻留的前两个连续日期时间点?

  24. 24

    每个时间段的唯一值

  25. 25

    ggplot中每个时间段的日期之间的阴影

  26. 26

    两个日期时间之间的差

  27. 27

    PHP的两个日期之间的时间是

  28. 28

    将时间序列除以日期时间段?

  29. 29

    如何计算两个时间段之间的小时和分钟?

热门标签

归档