Nest 是一种简单的伪编程语言,用于定义时间上的可重复和不可重复事件。

0.1.0 2021-08-24 18:18 UTC

This package is auto-updated.

Last update: 2024-09-13 21:30:32 UTC


README

Nest written in blue on a lighter blue background

Nest

Tests Formats License

Nest 是一种简单的伪编程语言,用于定义时间上的可重复和不可重复事件。

以下是一些语法示例

everyday at 7:00 for 3 minutes
tomorrow at 17:30 for an hour
every monday, saturday and sunday at 2 for 1h until 15/6/2021

Nest 输出时间段的列表。

以下是对 once 1/1/2021 from 15:00 to 16:00 的示例输出

[
    ["starts_at" => "2021-01-01 15:00:00", "ends_at" => "2021-01-01 16:00:00"]
]

特性

  • 自然语法
  • 错误报告
  • 快速

已经了解这些内容? 跳转到API文档

可重现性

相同的代码可能会根据当前时间导致完全不同的输出。

因此,当存储Nest代码时,如果您对可重现性有疑问(可能确实有),还应存储当前时间。

关键字

Once

Once 表示在给定日期重复一次事件。

for a day once 15/04/2005

隐式once

如果您在程序开头写它,则可以省略once关键字。

15/04/2005 被处理为 once 2005-04-15

at 6 15/04/2005 抛出 语法错误,意外的 15/04/2005

Every

Every 表示事件重复,参数为一个或多个工作日。

every monday and saturday

有关列表如何工作的说明,请参阅 此处

您可以使用缩写 everyday,它编译为一周中的每一天

everyday at 6:30

您还可以使用缩写 weekend,它编译为 周六和周日

every weekend

For

For 表示事件持续多久。

for one hour

有关如何在Nest中量化时间的指南,请参阅 此处

以下是可以使用的所有时间测量单位的列表

  • 分钟
  • 小时

您可以将它们复数化以使句子语法正确,但编译器不会注意如果您不这样做。

1h(1小时)之类的缩写也是允许的。

以下是所有可用缩写的列表

  • m: 分钟
  • h: 小时
  • d: 天
  • w: 周
  • min: 分钟

In

In 设置不可重复事件相对于当前日期的日期。

in 5 days

有关时间测量单位和如何量化时间的指南,请参阅 for 关键字

Between

Between 限制事件在两个日期之间。

between 12/04/2021 and 12/12/2021

如果您希望将事件限制在时间范围内,请使用 from

From ... to ...

From 限制事件在时间范围内。

from 22:00 to 23:05

Until

Until 是 between 关键字的缩写。

until 12/12/2021

起始日期是当前时间。

At

At 定义事件开始的时间。它通常与 for 结合使用,设置事件的持续时间。

at 6 for an hour

列表

列表包含一个或多个字面量,例如 monday1:00,并且这些字面量由逗号或单词 and 分隔。

monday, saturday and sunday
1:00,16:00
tuesday and sunday, monday
monday, saturday, sunday

量化时间

您可以使用从 onesixty 的任何数字。

for fifty-five minutes

您可以使用任何非负整数,例如 142

for 10 hours

为了表示一个时间单位,您可以使用更简单的形式

for an hour
for a day

编译器不区分您是写 a 还是 an,因此 for a hour 仍然代表 1 小时,尽管它在语法上是不正确的。

API

安装

如果您没有安装 composer,您可以在这里下载:下载链接

composer require felixdorn/nest

使用方法

\Felix\Nest\Nest::compile(
    'everyday for an hour at 12',
    \Carbon\CarbonPeriod::create(
        \Carbon\Carbon::now(),
        \Carbon\Carbon::now()->addWeek()
    )
    # Optionally, you can also pass the current time as a third parameter.
    # \Carbon\Carbon::now()
)

如果您的活动没有使用 between ... and ...until ... 设置固定的边界,它将无限重复。因此,您需要在编译时手动设置边界,所以有第二个 CarbonPeriod 参数。如果您知道您的活动有固定的边界,可以省略此参数。