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 zuoYouIndex = getZuoYouIndex(lunar.lunarMonth);
  final changQuIndex = getChangQuIndex(timeIndex);
  final dayIndex = fixeLunarDayIndex(lunar.lunarDay, timeIndex);

  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) + extra);
  final baZuoIndex = fixIndex(((youIndex - dayIndex) % 12) - extra);
  final tianGuiIndex = fixIndex((quIndex + dayIndex) % 12 - 1);
  final enguangIndex = fixIndex((changIndex + dayIndex) % 12 - 1);
  return {
    "sanTaiIndex": sanTaiIndex,
    "baZuoIndex": baZuoIndex,
    "tianGuiIndex": tianGuiIndex,
    "enguangIndex": enguangIndex,
  };
}