我正在寻找可以实现的方法/npm软件包:
- 月期
- SVG或月相的任何图形表示
- 该日期的照明
我尝试过:Suncalc但是,在此软件包中,SunCalc.getMoonIllumination()
满足照明和相位,但从阶段开始说是否满月很棘手。它没有图形表示。
我认为没有SVG随附的软件包,因此您需要自己来源/生产。
为了让Suncalc为您提供一个不错的数字,该阶段实际位于0
,0.25
,0.5
或0.75
上,最简单的是进行一些圆形:
如果您想直接到这些数字,则可以到达最近的季度:
var date = new Date();
Math.round(SunCalc.getMoonIllumination(date).phase * 4) / 4;
或(如在评论中指定的那样(如果您希望它仍然通过打蜡/减弱的部分,并坚持到达满月/新月/宿舍,大约一天,您可以四舍五入到最近的28日:
var date = new Date();
Math.round(SunCalc.getMoonIllumination(date).phase * 28) / 28;
为什么这起作用?为什么28?
因此,最简单的解释方法是再次查看四分之一示例。我们希望圆形数字匹配其中一个选项(0, 0.25, 0.5, 0.75
(。
因为Math.round
,转到最近的整数,我们希望这些结果成为我们可以围绕的整数。通过将它们乘以4,我们得到:
0 * 4 = 0
0.25 * 4 = 1
0.5 * 4 = 2
0.75 * 4 = 3
我们之间的所有内容最终都围绕着其中一个(除了一轮到5,我们需要将其包裹在自己身上(。
然后,我们将结果除以相同的乘数,以使数字恢复到预期范围内。
现在有28个工作,因为有两个原因:
- 4是28的因素。因此,有些数字会以.25的倍数返回
- 因为它接近几天内的月球周期的长度(〜29.53(
这意味着我们最终将结果四舍五入到每个值大约一天