alignTo method

Hora alignTo(
  1. int interval,
  2. TimePrecision precision
)

Aligns this date to a grid of the specified interval.

For example, alignTo(15, TimePrecision.minute) aligns to 15-minute intervals (0, 15, 30, 45 minutes).

Implementation

Hora alignTo(int interval, TimePrecision precision) {
  final truncated = truncateTo(precision);
  final value = switch (precision) {
    TimePrecision.year => year,
    TimePrecision.quarter => quarter,
    TimePrecision.month => month,
    TimePrecision.week => isoWeek,
    TimePrecision.day => day,
    TimePrecision.hour => hour,
    TimePrecision.minute => minute,
    TimePrecision.second => second,
    TimePrecision.millisecond => millisecond,
  };

  final aligned = (value ~/ interval) * interval;
  final diff = value - aligned;

  return truncated.subtract(diff, precision.toUnit);
}