获取时间段间的所有年月踩坑记录

    技术2022-07-10  100

    获取时间段间的所有年月踩坑记录

    一、前端js获取二、Java后台获取

    一、前端js获取

    踩坑代码

    function getMonthBetween(start,end){ var result = []; var s = start.split("-"); var e = end.split("-"); var min = new Date(); var max = new Date(); min.setFullYear(s[0],s[1]-1); max.setFullYear(e[0],e[1]-1); var curr = min; while(curr <= max){ var month = curr.getMonth(); var str=curr.getFullYear()+"-"+(month+1); result.push(str); console.log(str,month); curr.setMonth(month+1); console.log(curr.getMonth()); } return result.toString(); }

    执行结果,无法拿到2月 推测在setFullYear()的时候,只设置年和月可能默认设置了日

    测试setFullYear(s[0],s[1]-1,1)

    测试setFullYear(s[0],s[1]-1,29) 测试setFullYear(s[0],s[1]-1,30) 如果要完整获取到所有年月,setFullYear()的时候需要确保年月日都要有,并且日的值要在1-28以内

    二、Java后台获取

    踩坑代码

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM") Calendar cal = Calendar.getInstance(); cal.setTime(sdf.parse(testDate[0])); while (cal.getTime().before(sdf.parse(testDate[1]))){ String year=String.valueOf(cal.get(Calendar.YEAR)); int mon=cal.get(Calendar.MONTH)+1; String month = mon<10?("0"+mon):String.valueOf(mon); System.out.println("............"+id+"............"+year+"..........."+month+".............."); cal.add(Calendar.MONTH, 1); }

    传入的testDate里的值是 2020-06,2020-09,打印的结果不能拿到最后一个月 原因: java.util.Calendar.before() 方法返回此Calendar的时间是否在指定Object(时间)所表示的时间之前。 要确保拿到所有年月值需要将循环条件改成

    cal.getTime().before(sdf.parse(testDate[1]))||cal.getTime().equals(sdf.parse(testDate[1]))
    Processed: 0.027, SQL: 9