一个月中出现奇怪结果的天数
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 = 2017
和month = 6
。正如您将看到的,我从月份中减去 1,因为据我了解,JS 使用基于 0 的月份编号系统。
这会将 myDate 设置为 2017 年 5 月 31 日,函数返回 31 天。
如果我将公式更改为 const myDate = new Date(year, month - 1, 1);
,它会将日期设置为 2017 年 6 月 1 日并返回 1 天作为天数。
我可以使用 switch 语句来返回一个月中的天数,但这似乎很麻烦,甚至不会考虑闰年等。有没有一种优雅的方法来获取总天数特定年份的特定月份?
例如,如果我通过 year = 2016
和 month = 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 在他对原始帖子的评论中所说的相同,以及一个小提琴示例。 ...他从来没有得到回应,所以没有费心发布答案。以上是关于一个月中出现奇怪结果的天数的主要内容,如果未能解决你的问题,请参考以下文章
使用 libjpegturbo 压缩批量图片时出现奇怪的结果