npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

cron-fns

v1.2.0

Published

A simple, zero dependency implementation of cron schedule functions. Runs in the browser, in Node.js, in Deno, anywhere with `setTimeout`.

Downloads

47

Readme

cron-fns

A simple, zero dependency implementation of cron schedule functions. Runs in the browser, in Node.js, in Deno, anywhere with setTimeout.

npm version GitHub issues TypeDoc docs GitHub Workflow Status

Quick Start

npm install cron-fns --save
# or with yarn
yarn add cron-fns

Usage

CronDaemon

Executes a callback on a given schedule.

Note: This should be stopped if no longer in use in the application

import { CronDaemon } from "cron-fns";

const daemon = new CronDaemon("0,30 9-17 * * MON", () => {
  console.log("do some work");
});

// Check when it's going to run next
console.log(daemon.next());

// Stop the daemon
daemon.stop();

// Start it again
daemon.start();

// Check if it's running
console.log(daemon.state()); // "running"

nextCronOccurrence(schedule, from?) => Date | undefined

Fetches the next date that matches the schedule, or undefined if no other time is available.

import { nextCronOccurrence } from "cron-fns";

nextCronOccurrence("0,30 9-17 * * MON", new Date("2020-01-01T00:00:00"));
// Returns 2020-01-06T09:00:00

// `from` defaults to the current date if not specified.
nextCronOccurrence("0,30 9-17 * * MON 1987");
// Returns undefined if no more possible dates

nextCronOccurrences(schedule, from?)

Returns a generator which iterates through each sequential date in order from the specified start point. The generator will only stop iterating if there is no more possible dates.

import { nextCronOccurrences } from "cron-fns";

nextCronOccurrences("0,30 9-10 * * MON", new Date("2020-01-01T00:00:00"));
// Returns a generator with the sequence:
// 2020-01-06T09:00:00
// 2020-01-06T09:30:00
// 2020-01-06T10:00:00
// ...

Cron

import { Cron } from "cron-fns";
const cron = new Cron("0,30 9-17 * * MON");
cron.next(); // Returns the next date from now
cron.next(new Date("2020-01-01T00:00:00")); // Returns 2020-01-06T09:00:00

Cron syntax rules

//                    ┌───────────── minute (0 - 59)
//                    │    ┌───────────── hour (0 - 23)
//                    │    │  ┌───────────── day of the month (1 - 31)
//                    │    │  │ ┌───────────── month (1 - 12)
//                    │    │  │ │  ┌───────────── day of the week (0 - 6) (Sunday to Saturday)
//                    │    │  │ │  │
//                    │    │  │ │  │
nextCronOccurrence("0,30 9-17 * * MON");
  • Use a single space to separate fields.
  • Enumerate multiple values for a field by separating by a comma (,).
  • Specify a range of values with a hyphen (-).
  • Ranges and enumeration cannot be mixed.

Cron variations & notes

Optional years

If you specify 6 fields then the last field is the year. If not specifed it doesn't limit by year.

Optional seconds

If you specify 7 fields then the first field is the second. If not specified it chooses the zeroth second of each minute.

Timezones

All times and dates are based on the system (or browser's) local timezone.