Closed bk1d closed 1 week ago
我发现问题所在了,如果生日的月份与排盘日期在同一个月,可能这个逻辑会出问题:
// iztro/src/astro/FunctionalAstrolabe.ts
// 虚岁
let nominalAge = _date.lunarYear - _birthday.lunarYear;
// 是否童限
let isChildhood = false;
// 假如目标日期已经过了生日,则需要加1岁
// 比如 2022年九月初一 出生的人,在出生后虚岁为 1 岁
// 但在 2023年九月初二 以后,虚岁则为 2 岁
if (
(_date.lunarYear === _birthday.lunarYear &&
_date.lunarMonth === _birthday.lunarMonth &&
_date.lunarDay > _birthday.lunarDay) ||
_date.lunarMonth > _birthday.lunarMonth // ⚠️!!!这里无法判断,导致虚岁没有 +1!!!
) {
nominalAge += 1;
}
我看维基百科上关于虚岁的计算,按农历正月初一来算的话Wiki
是不是改成下面这样就好了?
// 虚岁
let nominalAge = _date.lunarYear - _birthday.lunarYear + 1;
// 或者?
if ( _date.lunarYear >= _birthday.lunarYear )
{
nominalAge += 1;
}
@bk1d 确实,按照虚岁的定义,是生命体在这个世界上生存了多少年,所以理论上应该只用考虑年份。 我存疑的地方是,如果一个小孩儿是农历腊月三十出生的, 那么按照虚岁的定义,正月初一的时候这个小孩儿虚岁就已经是两岁了。 不过这个地方我正在考虑把它做到参数配置里,用哪种方式计算由使用者自己决定。 感谢关注以及建议!
happy coding~
这样最好,我的生日就是这样。我家里说我生下来没几天就两岁了😂
描述(Description)
小限/虚岁计算好像有问题,我试了不同软件结果与库返回的不一致。
版本(Version)
重现(Reproduce)
当前日期为:2024-10-12 当把生日改到:1991-10-07 时虚岁为33岁 当把生日改到:1991-10-08 时虚岁为34岁
命理天机,测测等App都是虚岁34岁
调用的方法(funciton name)
const astrolabe = astro.astrolabeBySolarDate("1991-10-08", 4, "男", true, "zh-CN"); const horoscope = astrolabe.horoscope('2024-10-12', 2);