felixdorn / nest
Nest 是一种简单的伪编程语言,用于定义时间上的可重复和不可重复事件。
Requires
- php: ^8.0
- nesbot/carbon: ^2.52
Requires (Dev)
- friendsofphp/php-cs-fixer: ^v3.0.0
- pestphp/pest: ^v1.16.0
- phpstan/phpstan: ^0.12.88
- symfony/var-dumper: ^5.2.0
This package is auto-updated.
Last update: 2024-09-13 21:30:32 UTC
README
Nest
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
列表
列表包含一个或多个字面量,例如 monday
或 1:00
,并且这些字面量由逗号或单词 and
分隔。
monday, saturday and sunday
1:00,16:00
tuesday and sunday, monday
monday, saturday, sunday
量化时间
您可以使用从 one
到 sixty
的任何数字。
for fifty-five minutes
您可以使用任何非负整数,例如 1
或 42
。
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
参数。如果您知道您的活动有固定的边界,可以省略此参数。