uruloke/lara-calendar

为 Laravel 的周期性日历事件

dev-master 2018-04-14 14:28 UTC

This package is auto-updated.

Last update: 2024-08-28 23:44:58 UTC


README

Build Status License: MIT Latest Stable Version Total Downloads codecov StyleCI

文档仍在开发中。

介绍

构建一个日历可能会很麻烦,尤其是在处理周期性事件时。此包通过提供一个易于使用的事件构建器并具有扩展性来尝试解决这个问题。

此包是为 Laravel 设计的,并广泛使用 Laravel 集合。

要安装此包,只需运行并即可。

$ composer require uruloke/lara-calendar

服务提供者是自动加载的,所以请享受!

示例

假设我们想创建一个每周一、二、三和周四重复的事件。我们可以通过以下步骤简单地生成此事件

$builder = new EventBuilder();
$builder->startsAt(Carbon::parse("2017-09-05 08:00"));
$builder->endsAt(Carbon::parse("2017-09-05 18:00"));
$builder->weekly([Monday::class, Tuesday::class, Wednesday::class, Thursday::class]);

// Dump the results
$builder->getNextEvents(3)

接下来3个事件的导出数据将是

Uruloke\LaraCalendar\EventCollection {#221
  #items: array:3 [
    0 => Uruloke\LaraCalendar\Models\Event {#225
      #start: Uruloke\LaraCalendar\Carbon {#230
        +"date": "2017-09-05 08:00:00.000000"
        +"timezone_type": 3
        +"timezone": "UTC"
      }
      #ends: Uruloke\LaraCalendar\Carbon {#231
        +"date": "2017-09-05 18:00:00.000000"
        +"timezone_type": 3
        +"timezone": "UTC"
      }
    }
    1 => Uruloke\LaraCalendar\Models\Event {#232
      #start: Uruloke\LaraCalendar\Carbon {#233
        +"date": "2017-09-06 08:00:00.000000"
        +"timezone_type": 3
        +"timezone": "UTC"
      }
      #ends: Uruloke\LaraCalendar\Carbon {#234
        +"date": "2017-09-06 18:00:00.000000"
        +"timezone_type": 3
        +"timezone": "UTC"
      }
    }
    2 => Uruloke\LaraCalendar\Models\Event {#235
      #start: Uruloke\LaraCalendar\Carbon {#236
        +"date": "2017-09-07 08:00:00.000000"
        +"timezone_type": 3
        +"timezone": "UTC"
      }
      #ends: Uruloke\LaraCalendar\Carbon {#237
        +"date": "2017-09-07 18:00:00.000000"
        +"timezone_type": 3
        +"timezone": "UTC"
      }
    }
  ]
}

重复事件

每周

双周

偶数周

奇数周

过滤器

过滤掉特定日期

可能有一个特定的日期你希望从你的事件中排除。这可以通过使用 withoutDay 方法实现。只需解析一个日期,它就会忽略那个特定的日期。

$builder = new EventBuilder();
$builder->startsAt(Carbon::parse("2017-09-05 08:00"));
$builder->endsAt(Carbon::parse("2017-09-05 18:00"));
$builder->allWeekDays();
$builder->withoutDay(Carbon::parse("2017-09-07"));