zoukankan      html  css  js  c++  java
  • 根据俩日期(yyyy-MM-dd)格式获取它们之间的年月日组合结果(js实现)

    公司业务需要分层计算,所以做了个工具,本来想偷个懒网上找个可以用的方法,找了一个结果我测试了几个给陷入死循环了,很大的bug,改了半天,人家想法太复杂了,搞不了,所以自己写个,觉得挺有意思的,记录一下。

     1     function getYearAndMonthAndDay(stratstr,endstr){
     2         var _time;
     3         if(stratstr<endstr){
     4             _time=stratstr;
     5             stratstr = endstr;
     6             endstr = _time;
     7         }
     8         var arys= new Array();
     9         arys=stratstr.split('-');
    10         var stratDate=new Date(arys[0],arys[1]-1,arys[2]);
    11 
    12         arys=endstr.split('-');
    13         var endDate=new Date(arys[0],arys[1]-1,arys[2]);
    14 
    15         var syear = stratDate.getFullYear();
    16         var smonth = stratDate.getMonth()+1;
    17         var sday = stratDate.getDate();
    18 
    19         var eyear = endDate.getFullYear();
    20         var emonth = endDate.getMonth()+1;
    21         var eday = endDate.getDate();
    22         var day;
    23         var month;
    24         var year;
    25         //先计算天数
    26         if(sday>=eday){
    27             day=sday-eday;
    28         }else{//假如较大的日期天数上小于小的,就借上个月一整月天数
    29             var s1 = new Date(syear,smonth-2,1); //上个月,,,这里感觉是精髓所在,不用自己判断该月是不是1月,
            //减一个月会不会让年份发生变化,直接交由js自己封装的方法去做,只关注它减去一个月生成的日期, 上面日写成1是为了防止月天数不固定,写的太大(比如30天)二月份可能会进位,
    30 syear = s1.getFullYear();//更新上个月的年月 31 smonth = s1.getMonth()+1; 32 var d1 = getMonthDays(syear,smonth);//上个月天数 33 day = sday+d1-eday; 34 } 35 //比较月 36 if(smonth>=emonth){ 37 month = smonth-emonth; 38 }else{//借一年 39 var s1 = new Date(syear-1,smonth-1,1); //上个月 40 syear = s1.getFullYear();//更新上个月的年月 41 smonth = s1.getMonth()+1; 42 month = smonth+12-emonth; 43 } 44 year = syear-eyear; 45 var rep = new Object(); 46 rep.y = year; 47 rep.m = month; 48 rep.d = day; 49 return rep; 50 }

        function getMonthDays(y,m){
              var aMonthDays = [0,31,28,31,30,31,30,31,31,30,31,30,31];
              if((y%400 == 0) || (y%4==0 && y%100!=0)){
                  aMonthDays[2] = 29;
              }
              return aMonthDays[m];
          }
  • 相关阅读:
    C#24种设计模式汇总
    传智播客C++视频学习笔记(5)
    传智播客C++视频学习笔记(3)
    传智播客C++视频学习笔记(1)
    Learning hard 网络编程
    Learning hard 学习笔记
    男人和女人 访问者模式
    其实你不懂老板的心 解释器模式
    项目多也别傻做 享元模式
    git常用命令
  • 原文地址:https://www.cnblogs.com/soul113/p/10641054.html
Copyright © 2011-2022 走看看