git.sr.ht/~pingoo/stdx@v0.0.0-20240218134121-094174641f6e/cron/constantdelay.go (about) 1 package cron 2 3 import "time" 4 5 // ConstantDelaySchedule represents a simple recurring duty cycle, e.g. "Every 5 minutes". 6 // It does not support jobs more frequent than once a second. 7 type ConstantDelaySchedule struct { 8 Delay time.Duration 9 } 10 11 // Every returns a crontab Schedule that activates once every duration. 12 // Delays of less than a second are not supported (will round up to 1 second). 13 // Any fields less than a Second are truncated. 14 func Every(duration time.Duration) ConstantDelaySchedule { 15 if duration < time.Second { 16 duration = time.Second 17 } 18 return ConstantDelaySchedule{ 19 Delay: duration - time.Duration(duration.Nanoseconds())%time.Second, 20 } 21 } 22 23 // Next returns the next time this should be run. 24 // This rounds so that the next activation time will be on the second. 25 func (schedule ConstantDelaySchedule) Next(t time.Time) time.Time { 26 return t.Add(schedule.Delay - time.Duration(t.Nanosecond())*time.Nanosecond) 27 }