alignTo method
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) {
if (interval <= 0) {
throw ArgumentError.value(interval, 'interval', 'Must be positive.');
}
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 base = switch (precision) {
TimePrecision.quarter ||
TimePrecision.month ||
TimePrecision.week ||
TimePrecision.day =>
1,
_ => 0,
};
final aligned = ((value - base) ~/ interval) * interval + base;
final diff = value - aligned;
return truncated.subtract(diff, precision.toUnit);
}