What is @breejs/later?
@breejs/later is a scheduling library for JavaScript that allows you to define complex schedules using natural language or cron-like syntax. It is useful for tasks that need to be executed at specific times or intervals.
What are @breejs/later's main functionalities?
Basic Scheduling
This feature allows you to define a schedule using natural language and execute a function at the specified intervals.
const later = require('@breejs/later');
// Define a schedule to run every 5 minutes
const sched = later.parse.text('every 5 mins');
// Execute a function based on the schedule
later.setInterval(() => {
console.log('This runs every 5 minutes');
}, sched);
Cron Scheduling
This feature allows you to define a schedule using cron syntax, which is useful for more complex scheduling needs.
const later = require('@breejs/later');
// Define a schedule using cron syntax
const sched = later.parse.cron('0 0 * * *'); // Every day at midnight
// Execute a function based on the schedule
later.setInterval(() => {
console.log('This runs every day at midnight');
}, sched);
Custom Intervals
This feature allows you to define custom intervals for scheduling tasks, providing flexibility for various use cases.
const later = require('@breejs/later');
// Define a custom schedule
const sched = later.parse.recur().every(2).hour().first().minute();
// Execute a function based on the custom schedule
later.setInterval(() => {
console.log('This runs every 2 hours at the first minute');
}, sched);
Other packages similar to @breejs/later
node-cron
node-cron is a lightweight task scheduler in pure JavaScript for Node.js based on the cron syntax. It is simpler and more focused on cron-based scheduling compared to @breejs/later.
agenda
agenda is a light-weight job scheduling library for Node.js. It offers MongoDB-backed persistence and is more suitable for complex job scheduling and management compared to @breejs/later.
node-schedule
node-schedule is a flexible cron-like and not-cron-like job scheduler for Node.js. It supports both cron and non-cron syntax, similar to @breejs/later, but with a different API and feature set.
This project is a maintained fork of Later
Later is a library for describing recurring schedules and calculating their future occurrences. It supports a very flexible schedule definition including support for composite schedules and schedule exceptions. Create new schedules manually, via Cron expression, via text expressions, or using a fully chainable API.
Types of schedules supported by Later:
- Run a report on the last day of every month at 12 AM except in December
- Install patches on the 2nd Tuesday of every month at 4 AM
- Gather CPU metrics every 10 mins Mon - Fri and every 30 mins Sat - Sun
- Send out a scary e-mail at 13:13:13 every Friday the 13th
Installation
Using npm:
$ npm install @breejs/later
Using bower:
$ bower install @breejs/later
Building
To build the minified javascript files for later, run npm install
to install dependencies and then:
$ make all
Running tests
To run the tests for later, run npm install
to install dependencies and then:
$ make test
Versioning
Releases will be numbered with the following format:
<major>.<minor>.<patch>
And constructed with the following guidelines:
- Breaking backward compatibility bumps the major (and resets the minor and patch)
- New additions without breaking backward compatibility bumps the minor (and resets the patch)
- Bug fixes and misc changes bumps the patch
For more information on SemVer, please visit http://semver.org/.
Bug tracker
Have a bug or a feature request? Please open a new issue.
Change Log
@breejs/later v2.0.0
Later v1.2.0
- Implemented predefined scheduling definitions for cron
- @yearly, @annually, @monthly, @weekly, @daily, and @hourly are now parsed correctly
- Submitted by pekeler (thanks!)
Later v1.1.8, v1.1.9
- Fixed npm and bower entry points
Later v1.1.7
Later v1.1.3
- Merge consecutive ranges when using composite schedules (fixes issues #27)
Later v1.1.1 and v1.1.2
- Fixed handling of ranged schedules which never go invalid. End date is undefined for these types of schedules.
Later v1.1.0
- Implemented fullDate (fd) constraint to specify a specific occurrence (or exception)
later.parse.recur().on(new Date(2013,3,21,10,30,0)).fullDate()
Later v1.0.0
- Refactored core engine so that it could be better tested
- Added over 41,500 tests and fixed hundreds of edge cases that were unfortunately broken in v0.0.20
- Core engine is now extensible via custom time periods and custom modifiers
- Full examples included in the documentation
- Added support for finding valid ranges as well as valid instances of schedules
- Later can now be used to schedule activities and meetings as well as point in time occurrences
- Improved support for finding past ranges and instances
- Searching forward or backward now produces the same valid occurrences
- No more need to specify a resolution!
- Later now automatically handles this internally, you no longer need to specify your desired resolution. 'Every 5 minutes' now does exactly what you would expect it to :)
- Changing between UTC and local time has changed.
- Use
later.date.UTC()
and later.date.localTime()
to switch between the two.
- API for parsers has changed.
- Recur is now at
later.parse.recur()
- Cron is now at
later.parse.cron(expr)
- Text is now at
later.parse.text(expr)
- API for calculating occurrences has changed.
- Schedules are now compiled using
later.schedule(schedule)
- getNext is now
later.schedule(schedule).next(count, start, end)
- getPrev is now
later.schedule(schedule).prev(count, start, end)
After
meaning 'don't start until after this amount of time' has been deprecated.
- This was a hack since people had a hard time with resolutions. With resolutions gone, this is no longer needed and is deprecated since it produced non-deterministic schedules.
Note: Schedule definitions did not change (unless you were using after
constraints which have been deprecated). If you stored any schedule definitions from v0.0.20, they should continue to work unchanged in v1.0.0.