Giter Club home page Giter Club logo

cronplan's Introduction

cronplan

CI Go Reference Go Report Card

Overview

Cron expression parser for Amazon EventBridge.

Try with curl

$ curl cronplan.in -d '5 0 10 * ? *'
Tue, 10 Oct 2023 00:05:00
Fri, 10 Nov 2023 00:05:00
Sun, 10 Dec 2023 00:05:00
Wed, 10 Jan 2024 00:05:00
Sat, 10 Feb 2024 00:05:00
Sun, 10 Mar 2024 00:05:00
Wed, 10 Apr 2024 00:05:00
Fri, 10 May 2024 00:05:00
Mon, 10 Jun 2024 00:05:00
Wed, 10 Jul 2024 00:05:00

Installation

go get github.com/winebarrel/cronplan

Usage

package main

import (
	"fmt"
	"time"

	"github.com/winebarrel/cronplan"
)

func main() {
	cron, err := cronplan.Parse("0 10 * * ? *")

	if err != nil {
		panic(err)
	}

	fmt.Println(cron.Minute.Exps[0].Number) //=> 0
	fmt.Println(cron.Hour.Exps[0].Number)   //=> 10
	fmt.Println(cron.String())              //=> "0 10 * * ? *"

	fmt.Println(cron.Match(time.Date(2022, 11, 3, 9, 0, 0, 0, time.UTC)))
	//=> false
	fmt.Println(cron.Match(time.Date(2022, 11, 3, 10, 0, 0, 0, time.UTC)))
	//=> true

	fmt.Println(cron.Next(time.Date(2022, 11, 3, 10, 0, 0, 0, time.UTC)))
	//=> 2022-11-03 10:00:00 +0000 UTC
	fmt.Println(cron.Next(time.Date(2022, 11, 3, 11, 0, 0, 0, time.UTC)))
	//=> 2022-11-04 10:00:00 +0000 UTC
	fmt.Println(cron.NextN(time.Date(2022, 11, 3, 10, 0, 0, 0, time.UTC), 3))
	//=> [2022-11-03 10:00:00 +0000 UTC 2022-11-04 10:00:00 +0000 UTC 2022-11-05 10:00:00 +0000 UTC]

	fmt.Println(cron.Between(
		time.Date(2022, 11, 3, 10, 0, 0, 0, time.UTC),
		time.Date(2022, 11, 4, 10, 0, 0, 0, time.UTC),
	))
	//=> [2022-11-03 10:00:00 +0000 UTC 2022-11-04 10:00:00 +0000 UTC]
}

Behavior of "L" in day-of-week

If you specify "L" for day-of-week, the last day of the week of each month is usually matched.

# cron(0 0 ? * 6L *)
Fri, 27 Oct 2023 00:00:00
Fri, 24 Nov 2023 00:00:00
Fri, 29 Dec 2023 00:00:00
Fri, 26 Jan 2024 00:00:00
Fri, 23 Feb 2024 00:00:00

However, if you do not specify the day of the week before "L", the behavior will be the same as when you specify "SAT".

# cron(0 0 ? * L *) = cron(0 0 ? * SAT *)
Sat, 07 Oct 2023 00:00:00
Sat, 14 Oct 2023 00:00:00
Sat, 21 Oct 2023 00:00:00
Sat, 28 Oct 2023 00:00:00
Sat, 04 Nov 2023 00:00:00

cronplan CLI

CLI to show next triggers.

Installation

brew install winebarrel/cronplan/cronplan

Usage

Usage: cronplan [OPTION] CRON_EXPR
  -h int
    	hour to add
  -n int
    	number of next triggers (default 10)
  -version
    	print version and exit
$ cronplan '*/10 10 ? * MON-FRI *'
Tue, 11 Oct 2022 10:00:00
Tue, 11 Oct 2022 10:10:00
Tue, 11 Oct 2022 10:20:00
Tue, 11 Oct 2022 10:30:00
Tue, 11 Oct 2022 10:40:00
Tue, 11 Oct 2022 10:50:00
Wed, 12 Oct 2022 10:00:00
Wed, 12 Oct 2022 10:10:00
Wed, 12 Oct 2022 10:20:00
Wed, 12 Oct 2022 10:30:00

$ cronplan -h -9 '*/10 10 ? * MON-FRI *'
Tue, 11 Oct 2022 01:00:00
Tue, 11 Oct 2022 01:10:00
Tue, 11 Oct 2022 01:20:00
Tue, 11 Oct 2022 01:30:00
Tue, 11 Oct 2022 01:40:00
Tue, 11 Oct 2022 01:50:00
Wed, 12 Oct 2022 01:00:00
Wed, 12 Oct 2022 01:10:00
Wed, 12 Oct 2022 01:20:00
Wed, 12 Oct 2022 01:30:00

cronmatch CLI

CLI to check if datetime matches cron expression.

Installation

brew install winebarrel/cronplan/cronmatch

Usage

Usage: cronmatch [OPTION] CRON_EXPR DATE
  -h int
    	hour to add
  -no-color
    	disable color output
  -version
    	print version and exit
$ cronmatch -h -9 '0 1 * * ? *' '2022/10/20 10:00'
'0 1 * * ? *' matches '2022/10/20 10:00' (offset: -9h)

$ cronmatch '0 10 * * ? *' 'Oct 10, 2022, 10:10'
'0 10 * * ? *' does not match 'Oct 10, 2022, 10:10'

cf. https://github.com/araddon/dateparse

cronviz CLI

CLI to visualize cron schedule.

inspired by cronv, aws-cronv.

Installation

brew install winebarrel/cronplan/cronviz

Usage

Usage: cronviz [OPTION] [FILE]
  -f string
    	from date (default current date)
  -h int
    	hour to add
  -p string
    	period (default "1d")
  -version
    	print version and exit
$ cat cron.txt
batch1  0 * * * ? *
batch2  30 */2 * * ? *
batch3  15,45 */3 * * ? *

$ cronviz cron.txt > output.html
$ open output.html

cf. https://raw.githack.com/winebarrel/cronplan/main/_example/timeline.html

crongrep CLI

CLI to grep with cron expression.

Installation

brew install winebarrel/cronplan/crongrep

Usage

Usage: crongrep [OPTION] CRON_EXPR
  -version
    	print version and exit
$ cronplan -n 5 '10 12 */5 * ? *'
Fri, 06 Oct 2023 12:10:00
Wed, 11 Oct 2023 12:10:00
Mon, 16 Oct 2023 12:10:00
Sat, 21 Oct 2023 12:10:00
Thu, 26 Oct 2023 12:10:00

$ cronplan -n 5 '10 12 */5 * ? *' | crongrep '* * ? * WED-FRI *'
Fri, 06 Oct 2023 12:10:00
Wed, 11 Oct 2023 12:10:00
Thu, 26 Oct 2023 12:10:00

Related Links

cronplan's People

Contributors

dependabot[bot] avatar github-actions[bot] avatar winebarrel avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.