• 使用Javascript计算时间差和计算日期加天数后的日期值


    给客户演示系统回来后,用户对以前的一个系统提出了一些在界面上需要完善的建议,其中有一个是使页面中的汇报日期=填发日期+有效期.填发日期是取系统时间,汇报日期可以修改,有效期可以修改,任意改其中一个都应该能使另一个变成正确的。今天下班后不想回去呢,就在网上找相应的例子,结果都不适用,根本就没有把闰年和月份的天数考虑进去,只好自己来写了。现在把代码也贴上来,跟大家共享。

     

     

    //判断年份是否是闰年

    function isLeapYear(year){

        

        if(year%400==0){

            return false;    

        }else if(year%4==0){

            return true;

        }else{

            return false;

        }

    }

    //计算两个日期的差值

    function compareDate(date1,date2)

    {

        var regexp=/^(\d{1,4})[-|\.]{1}(\d{1,2})[-|\.]{1}(\d{1,2})$/;

        var monthDays=[0,3,0,1,0,1,0,0,1,0,0,1];

        regexp.test(date1);

        var date1Year=RegExp.$1;

        var date1Month=RegExp.$2;

        var date1Day=RegExp.$3;

        regexp.test(date2);

        var date2Year=RegExp.$1;

        var date2Month=RegExp.$2;

        var date2Day=RegExp.$3;

        firstDate=new Date(date1Year,date1Month,date1Day);

        secondDate=new Date(date2Year,date2Month,date2Day);

        result=Math.floor((secondDate.getTime()-firstDate.getTime())/(1000*3600*24));

        for(j=date1Year;j<=date2Year;j++){

            if(isLeapYear(j)){

                monthDays[1]=2;

            }else{

                monthDays[1]=3;

            }

            for(i=date1Month-1;i<date2Month;i++){

                result=result-monthDays[i];

            }

        }

        return result;

    }

    //计算日期加上天数后的日期

    function addDays(date1,days){

        var monthDays=[0,3,0,1,0,1,0,0,1,0,0,1];

        var regexp=/^(\d{1,4})[-|\.]{1}(\d{1,2})[-|\.]{1}(\d{1,2})$/;

        regexp.test(date1);

        var date1Year=RegExp.$1;

        var date1Month=RegExp.$2;

        var date1Day=RegExp.$3;

        firstDate=new Date(date1Year,date1Month,date1Day);

        firstDate.setTime(firstDate.getTime()+days*1000*3600*24);

        var diff=0;

        for(j=date1Year;j<=firstDate.getYear();j++){

            if(isLeapYear(j)){

                monthDays[1]=2;

            }else{

                monthDays[1]=3;

            }

            for(i=date1Month-1;i<firstDate.getMonth()-1;i++){

                diff=diff+monthDays[i];

            }

        }

        result=firstDate.getYear()+"-"+firstDate.getMonth()+"-"+firstDate.getDate();

        if(diff!=0){

            result=addDays(result,diff);

        }

        return result;

        

    }

  • 相关阅读:
    函数高阶(函数,改变函数this指向,高阶函数,闭包,递归)
    案例:新增数组方法
    案例:商品查询
    案例:forEach和some区别
    ES5新增方法(数组,字符串,对象)
    案例:借用父构造函数继承属性和方法
    构造函数 和 原型
    汽车小常识别让六大汽车驾驶软肋阻碍你
    Opencv 图像增强和亮度调整<6>
    C# StringBulider用法<1>
  • 原文地址:https://www.cnblogs.com/pansly/p/2158892.html
Copyright © 2020-2023  润新知