一个月中出现奇怪结果的天数

Posted

技术标签:

【中文标题】一个月中出现奇怪结果的天数【英文标题】:Number of days in a month giving strange results 【发布时间】:2017-12-05 15:06:39 【问题描述】:

我创建了以下函数,它应该返回一个月中的天数,但我没有得到预期的结果。

export const getNumberOfDaysInMonth = (year, month) => 

    const myDate = new Date(year, month - 1, 0);
    return myDate.getDate();

我正在传递year = 2017month = 6。正如您将看到的,我从月份中减去 1,因为据我了解,JS 使用基于 0 的月份编号系统。

这会将 myDate 设置为 2017 年 5 月 31 日,函数返回 31 天。

如果我将公式更改为 const myDate = new Date(year, month - 1, 1);,它会将日期设置为 2017 年 6 月 1 日并返回 1 天作为天数。

我可以使用 switch 语句来返回一个月中的天数,但这似乎很麻烦,甚至不会考虑闰年等。有没有一种优雅的方法来获取总天数特定年份的特定月份?

例如,如果我通过 year = 2016month = 2,我应该得到 29 而不是 28。

【问题讨论】:

像这样 -> jsfiddle.net/73d4vjx1 记住那一天 0 是上个月的最后天,所以 2 月你真的想通过 2月份,所以你得到了三月,但是因为你通过了0 的日期,你得到了二月的最后一个日期。 【参考方案1】:

做的时候

const myDate = new Date(year, month - 1, 0);

您不需要从月份中减去 1。这是因为这里的日期函数中的第三个参数,代表月份的day,设置为0,实际上是上个月的最后一天。所以就这样做

const myDate = new Date(年, 月, 0);

应该给你一个月的天数的期望结果。

【讨论】:

非常有意义。谢谢! 这与adeno 在他对原始帖子的评论中所说的相同,以及一个小提琴示例。 ...他从来没有得到回应,所以没有费心发布答案。

以上是关于一个月中出现奇怪结果的天数的主要内容,如果未能解决你的问题,请参考以下文章

HIVE一个月中的天数[重复]

如何获得一个月的所有天数? [复制]

使用算法生成一个月中的天数

使用 libjpegturbo 压缩批量图片时出现奇怪的结果

自定义 UITabBarItem 的文本颜色和字体导致 swift 出现奇怪的结果

奇怪的 OpenCV 距离变换结果