我需要找到这个月,上个月和下个月的具体日期。
例如,日期被设置为每月的31,我希望得到的日期是2018-02-28,2018-03-31和2018-04-30。对于那些没有31的日期,比它成为前一天。
最后生成2期,2018-02-28至2018-03-29,2018-03-30至2018-04-31。我不知道如何处理二月和不到31的月份。
var d = new Date();
var tyear = d.getFullYear(); //2018
var tmonth = d.getMonth(); //2
new Date(2018, tmonth-1, 31);//output 2018-03-02 not what I wanted
7条答案
按热度按时间cbjzeqam1#
一个简单的算法是将月份添加到原始日期,如果新日期错误,则将其设置为前一个月的最后一天。保持原始日期值不变会有所帮助,例如:
tyky79it2#
我想你需要一个有12个数字的数组。每个数字是每个月的天数,数组中的数字按顺序排列(第一个数字是31,因为1月有31天,第二个数字是28或29,代表2月)。然后,您将从输入的日期中获取月份号,并在数组中查找与月份号+/- 1对应的数字。
然后,您需要根据当前月份的天数构建上个月和下个月的日期。
见内联评论:
idv4meu83#
使用此方法:
Javascript Date Object – Adding and Subtracting Months
作者
在尝试前进到下一个月或返回到前一个月时,JavaScript
Date()
对象有一个小问题。例如,如果您的日期设置为2018年10月31日,并添加一个月,则您可能会期望新日期为2018年11月30日,因为11月31日不存在。然而,事实并非如此。
JavaScript会自动将
Date
对象提前到12月1日。此功能在大多数情况下都非常有用(即,在日期上加上天数,确定一个月的天数或是否是闰年),但不适用于加/减月份。下面我整理了一些扩展Date()
对象的函数:nextMonth()
和prevMonth()
。qij5mzcb4#
日期和时区在JS中是一个真实的痛苦,所以接受挑战。
我把它分解成两个步骤:
包括的测试用例
请注意,黑客与
new Date(xxx + " UTC")
是不符合规格,只是有测试的目的.结果可能因浏览器而异。您应该选择一种输入格式并相应地构建日期。6tr1vspr5#
我用一种愚蠢的方式处理它,
然后
gopyfrb36#
我希望这会有所帮助。它对我很有效
x4shl7ld7#
即使在最好的情况下,处理日期也是很棘手的。别自己动手使用Moment.js。