getDailyStarIndex function

Map<String, int> getDailyStarIndex(
  1. String solarDateStr,
  2. int timeIndex, [
  3. bool? fixLeap
])

获取日系星索引,包括

三台,八座,恩光,天贵

  • 安三台八座

    • 由左辅之宫位起初一,顺行至生日安三台。
    • 由右弼之宫位起初一,逆行至生日安八座。
  • 安恩光天贵

    • 由文昌之宫位起初一,顺行至生日再退一步起恩光。
    • 由文曲之宫位起初一,顺行至生日再退一步起天贵。

@param solarDateStr 阳历日期 @param timeIndex 时辰索引【0~12】 @returns 三台,八座索引

Implementation

Map<String, int> getDailyStarIndex(
  String solarDateStr,
  int timeIndex, [
  bool? fixLeap,
]) {
  final lunar = solar2Lunar(solarDateStr);
  final changQuIndex = getChangQuIndex(timeIndex);
  final dayIndex = fixeLunarDayIndex(lunar.lunarDay, timeIndex);
  final monthIndex = fixLunarMonthIndex(solarDateStr, timeIndex, fixLeap);
  final zuoYouIndex = getZuoYouIndex(monthIndex + 1);
  final zuoIndex = zuoYouIndex["zuoIndex"] ?? -1;
  final youIndex = zuoYouIndex["youIndex"] ?? -1;
  final quIndex = changQuIndex["quIndex"] ?? -1;
  final changIndex = changQuIndex["changIndex"] ?? -1;
  // var extra = 0;
  // if (fixLeap == true) {
  //   // 当lunarMonth 为闰月月份并且是后半月时,需要额外加1
  //   final year = LunarYear(lunar.lunarYear);
  //   final leapMonth = year.getLeapMonth();
  //   if (leapMonth > 0 && lunar.lunarMonth == leapMonth && lunar.lunarDay > 15) {
  //     extra = 1;
  //   }
  // }
  final sanTaiIndex = fixIndex(((zuoIndex + dayIndex) % 12));
  final baZuoIndex = fixIndex(((youIndex - dayIndex) % 12));
  final enguangIndex = fixIndex((changIndex + dayIndex) % 12 - 1);
  final tianGuiIndex = fixIndex((quIndex + dayIndex) % 12 - 1);

  return {
    "sanTaiIndex": sanTaiIndex,
    "baZuoIndex": baZuoIndex,
    "tianGuiIndex": tianGuiIndex,
    "enguangIndex": enguangIndex,
  };
}