alignDateTime method
Aligns the current DateTime to the specified duration.
Args: alignment (Duration): The duration to align to. roundUp (bool): If true, the DateTime is rounded up to the next alignment. Defaults to false.
Returns: DateTime: A new DateTime object aligned to the specified duration.
Implementation
DateTime alignDateTime({required Duration alignment, bool roundUp = false}) {
// ref: https://stackoverflow.com/questions/60880315/how-to-round-up-the-date-time-nearest-to-30-min-interval-in-dart-flutter
if (alignment == Duration.zero) {
return this;
}
final Duration correction = Duration(
//days: 0,
hours: alignment.inDays > 0
? hour
: alignment.inHours > 0
? hour % alignment.inHours
: 0,
minutes: alignment.inHours > 0
? minute
: alignment.inMinutes > 0
? minute % alignment.inMinutes
: 0,
seconds: alignment.inMinutes > 0
? second
: alignment.inSeconds > 0
? second % alignment.inSeconds
: 0,
milliseconds: alignment.inSeconds > 0
? millisecond
: alignment.inMilliseconds > 0
? millisecond % alignment.inMilliseconds
: 0,
microseconds: alignment.inMilliseconds > 0 ? microsecond : 0,
);
if (correction == Duration.zero) {
return this;
}
final DateTime corrected = subtract(correction);
return roundUp ? corrected.add(alignment) : corrected;
}