addBusinessDays method

Hora addBusinessDays(
  1. int days, [
  2. BusinessDayConfig config = BusinessDayConfig.standard
])

Adds the specified number of business days.

final h = Hora.of(year: 2023, month: 12, day: 22); // Friday
final result = h.addBusinessDays(3); // Wednesday (skips Sat, Sun)

Implementation

Hora addBusinessDays(
  int days, [
  BusinessDayConfig config = BusinessDayConfig.standard,
]) {
  _requireValidBusinessDate(this, 'addBusinessDays');
  _validateTraversalConfig(config, method: 'addBusinessDays');
  if (days == 0) return this;

  var current = this;
  var remaining = days.abs();
  final direction = days.isNegative ? -1 : 1;
  var iterations = 0;
  final maxIterations = days.abs() * 20 + _maxBusinessDaySearchIterations;

  while (remaining > 0) {
    current = direction > 0
        ? current.add(1, TemporalUnit.day)
        : current.subtract(1, TemporalUnit.day);
    iterations++;
    if (iterations > maxIterations) {
      throw StateError(
        'addBusinessDays() exceeded search guard ($maxIterations steps). '
        'Check weekend/holiday configuration.',
      );
    }

    if (current.isBusinessDay(config)) {
      remaining--;
    }
  }

  return current;
}