1. 补充农历覆盖到公元前104年

2. 农历信息中包含君主、年号、朝代
3. 丰富一些算法,修正一些问题
This commit is contained in:
2025-09-15 20:55:38 +08:00
parent 438f1700c7
commit d6b6452304
18 changed files with 7048 additions and 458 deletions
+37 -1
View File
@@ -1,6 +1,7 @@
package moon
import (
"b612.me/astro/tools"
"errors"
"math"
"time"
@@ -201,7 +202,7 @@ func SetTime(date time.Time, lon, lat, height float64, aero bool) (time.Time, er
if aero {
aeroFloat = 1
}
downJde := basic.GetMoonDownTime(jde, lon, lat, timezone, aeroFloat, height)
downJde := basic.GetMoonSetTime(jde, lon, lat, timezone, aeroFloat, height)
if downJde == -3 {
err = ERR_NOT_TODAY
}
@@ -214,6 +215,41 @@ func SetTime(date time.Time, lon, lat, height float64, aero bool) (time.Time, er
return basic.JDE2DateByZone(downJde, date.Location(), true), err
}
// SunMoonLoDiff 日月黄经差,新月时为0,满月时为180
// 取值范围[0,360)
func SunMoonLoDiff(date time.Time) float64 {
jde := basic.TD2UT(basic.Date2JDE(date.UTC()), true)
sunLo := basic.HSunApparentLo(jde)
moonLo := basic.HMoonApparentLo(jde)
return tools.Limit360(moonLo - sunLo)
}
// PhaseDesc 月相描述
// 返回Date对应UTC世界时的月相描述
// 取值范围:新月,上峨眉月,上弦月,盈凸月,满月,亏凸月,下弦月,下峨眉月,残月
func PhaseDesc(date time.Time) string {
moonSunLoDiff := SunMoonLoDiff(date)
if moonSunLoDiff >= 0 && moonSunLoDiff <= 30 {
return "新月"
} else if moonSunLoDiff > 30 && moonSunLoDiff <= 75 {
return "上峨眉月"
} else if moonSunLoDiff > 75 && moonSunLoDiff <= 135 {
return "上弦月"
} else if moonSunLoDiff > 135 && moonSunLoDiff < 170 {
return "盈凸月"
} else if moonSunLoDiff >= 170 && moonSunLoDiff <= 190 {
return "满月"
} else if moonSunLoDiff > 190 && moonSunLoDiff < 225 {
return "亏凸月"
} else if moonSunLoDiff >= 225 && moonSunLoDiff < 285 {
return "下弦月"
} else if moonSunLoDiff >= 285 && moonSunLoDiff < 330 {
return "下峨眉月"
} else {
return "残月"
}
}
// Phase 月相
// 返回Date对应UTC世界时的月相大小
func Phase(date time.Time) float64 {