waterbeside / lunisolar

Typescript农历库,支持阴历公历互转,支持各类黄历数据查询,如八字四柱、阴历、神煞宜忌、建除十二神、胎神占方、吉神方位、五行纳音等。支持自定义插件。

Home Page:https://lunisolar.js.org

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

1986年到1991年间 阴历转阳历时辰出错

marga8080 opened this issue · comments

1986年到1991年间 这六年 阴历转阳历时辰出错
比如农历1986年6月11日午时

let ymd = {
                year: 1986,
                month: 6,
                day: 11,
                hour: '午'
            }
            // console.log(ymd)
            const ob = lunisolar.fromLunar(ymd)
            console.log(ob.format('YYYY-MM-DD HH:mm'))

正确应该是1986-07-17 12:00
但是得到的却是1986-07-17 13:00

1986年到1991年间 这六年 阴历转阳历时辰出错 比如农历1986年6月11日午时

let ymd = {
                year: 1986,
                month: 6,
                day: 11,
                hour: '午'
            }
            // console.log(ymd)
            const ob = lunisolar.fromLunar(ymd)
            console.log(ob.format('YYYY-MM-DD HH:mm'))

正确应该是1986-07-17 12:00 但是得到的却是1986-07-17 13:00

您好,我用了你的示例去测式,返回的是 1986-07-17 12:00 并没有复现你所说的问题。

我也再检查了一下代码,理论上时辰不会返回单数点给你,

fromLunar的转换逻辑是:
1,先把当年所有的阴历新年对应的公历日期查出来,转为date对象,使用 xxxx-xx-xx 日期字符串转换,得到的是当地0时的日期 nyd
2,计算目标阴历日期 与 nyd 相差多少天 diffDay ,
3, 计算时辰,取得时的时辰顺序索引 6
4, nyd时间戳 + (diffDay * 24 * 60 * 60 * 1000) + (6 * 2 * 60 * 60 * 1000) 所得到的新时间戳就是结果。 因为nyd取的是0点时间,而时辰索引必定 * 2,所以计算出来的结果的时间必定是双数钟点时间。

初步怀疑原因:
1 浏览器是否装有时区相关的插件,影响显示?

image
image
image
lunisolar 版本为2.5.0

我国在1986年到1991年这六年时间实行夏令时,导致那几天时钟拨快一小时
https://upimg.baike.so.com/doc/1958074-2072189.html

我国在1986年到1991年这六年时间实行夏令时,导致那几天时钟拨快一小时 https://upimg.baike.so.com/doc/1958074-2072189.html

收到,后续我会处理这个情况。