Calculate even intervals for. Sometimes we need to have periodic tasks to be executed exactly at certain time points, for example running a task every 15 minutes.
- At the beginning of hour,
- 15th minute,
- 30th minute,
- 45th minute.
So instead of doing it manually, it is better if it is automated.
Available functions:
Every.minute/1Every.minutes/2Every.hour/1Every.hours/2Every.day/1
All functions accept an optional relative_to (DateTime or NaiveDateTime)
parameter which can be used to fake the current moment in time. If it is not
provided, the current time will be used.
Every.minute/1, Every.hour/1 and Every.day/1 only accept the optional
relative_to parameter. They return the milliseconds left until the next
minute/hour/day.
Every.minutes/2 and Every.hours/2 both accept an interval as first parameter
and the optional relative_to as second parameter. They return the milliseconds
until the the next interval.
Note: All functions return the difference in milliseconds!
# Lets say we want to trigger our task every 5 minutes and current time is 12:02
# so next calls will be at 12:05, 12:10 ... 12:55 ...
Process.send_after(self(), :work, Every.minutes(5))
# If we want to trigger every minute
Process.send_after(self(), :work, Every.minute())
# If we want to trigger every hour
Process.send_after(self(), :work, Every.hour())
# If we want to trigger every 2 hours
Process.send_after(self(), :work, Every.hours(2))
# If we want to trigger every day
Process.send_after(self(), :work, Every.day())This library can be installed by adding every to the list of dependencies in
your mix.exs:
def deps do
[{:every, "~> 0.0.9"}]
endHave fun!
✨ 🍰 ✨