func newIntervalTrigger()

in file/trigger.go [116:144]


func newIntervalTrigger(interval time.Duration, clock clock) trigger {
	t := intervalTrigger{interval: interval, clock: clock}

	switch interval {
	case time.Second:
		t.newInterval = newSecond
	case time.Minute:
		t.newInterval = newMinute
	case time.Hour:
		t.newInterval = newHour
	case 24 * time.Hour: // calendar day
		t.newInterval = newDay
	case 7 * 24 * time.Hour: // calendar week
		t.newInterval = newWeek
	case 30 * 24 * time.Hour: // calendar month
		t.newInterval = newMonth
	case 365 * 24 * time.Hour: // calendar year
		t.newInterval = newYear
	default:
		t.newInterval = func(lastTime time.Time, currentTime time.Time) bool {
			lastInterval := lastTime.Unix() / (int64(t.interval) / int64(time.Second))
			currentInterval := currentTime.Unix() / (int64(t.interval) / int64(time.Second))
			return lastInterval != currentInterval
		}
	}

	t.lastRotate = clock.Now()
	return &t
}