getFu method

Fu? getFu()

Implementation

Fu? getFu() {
  Solar current = Solar.fromYmd(_solar!.getYear(), _solar!.getMonth(), _solar!.getDay());
  Solar xiaZhi = _jieQi['夏至']!;
  Solar liQiu = _jieQi['立秋']!;
  Solar start = Solar.fromYmd(xiaZhi.getYear(), xiaZhi.getMonth(), xiaZhi.getDay());
  // 第1个庚日
  int add = 6 - xiaZhi.getLunar().getDayGanIndex();
  if (add < 0) {
    add += 10;
  }
  // 第3个庚日,即初伏第1天
  add += 20;
  start = start.next(add);

  // 初伏以前
  if (current.isBefore(start)) {
    return null;
  }

  int days = current.subtract(start);
  if (days < 10) {
    return new Fu('初伏', days + 1);
  }

  // 第4个庚日,中伏第1天
  start = start.next(10);
  days = current.subtract(start);
  if (days < 10) {
    return new Fu('中伏', days + 1);
  }

  // 第5个庚日,中伏第11天或末伏第1天
  start = start.next(10);
  days = current.subtract(start);

  Solar liQiuSolar = Solar.fromYmd(liQiu.getYear(), liQiu.getMonth(), liQiu.getDay());
  // 末伏
  if (liQiuSolar.isAfter(start)) {
    // 中伏
    if (days < 10) {
      return Fu('中伏', days + 11);
    }
    // 末伏第1天
    start = start.next(10);
    days = current.subtract(start);
  }
  if (days < 10) {
    return Fu('末伏', days + 1);
  }
  return null;
}