JavaScript计算时间间隔(年月日时分秒)

1、JavaScript 计算时间间隔(考虑闰年)

效果示意: https://andyqi2018.gitee.io/qblog/essay/2019/20190216.html

纯 JavaScript 实现实时刷新时间间隔,未使用后端,代码如下:

// 当前效果为在一个HTML文档中一个区域每秒实时刷新显示距今的时间
var y = 0, m = 0, d = 0;

function show(){
   
    var originTime = new Date();
    var nowTime = new Date();
    originTime.setFullYear(2019,1,17); //设置第一个时间,注意月份是0~11
    originTime.setHours(0,35,0,0);
    //nowTime.setFullYear(2020,2,11); //设置第二个时间,若不设置则为当前时间
    //nowTime.setHours(22,22,0,0);
        
    var date21 = nowTime.getTime() - originTime.getTime();
    var tempY1 = originTime.getFullYear();
    var tempM1 = originTime.getMonth()+1;
    var tempD1 = originTime.getDate();
    var tempStr1 = tempY1 + "-" + tempM1 + "-" + tempD1;
    var tempY2 = nowTime.getFullYear();
    var tempM2 = nowTime.getMonth()+1;
    var tempD2 = nowTime.getDate();
    var tempStr2 = tempY + "-" + tempM + "-" + tempD;
    var tempON = [tempStr1, tempStr2];
    
    var days=Math.floor(date21/(24*3600*1000));     
    var leave1=date21%(24*3600*1000);
    var hours=Math.floor(leave1/(3600*1000));
    var leave2=leave1%(3600*1000);
    var minutes=Math.floor(leave2/(60*1000));
    var leave3=leave2%(60*1000);
    var seconds=Math.round(leave3/1000);
    getDiffYmdBetweenDate(tempON[0],tempON[1]);

    var timeON = new String("相差");
    timeON += y + "年" + m + "月" + d + "日" + hours + "小时" + minutes + "分钟" + seconds + "秒";
    document.getElementById("timeer").innerHTML = timeON; //刷新区域ID
    setTimeout("show()",1000); //刷新时间间隔
}


var getDiffYmdBetweenDate = function(sDate1,sDate2){
   
    var fixDate = function(sDate){
   
        var aD = sDate.split('-');
        for(var i = 0; i < aD.length; i++){
   
            aD[i] = fixZero(parseInt(aD[i]));
        }
        return aD.join('-');
    };

    var fixZero = function(n){
   
        return n < 10 ? '0'+n : n;
    };

    var fixInt = function(a){
   
        for(var i = 0; i < a.length; i++){
   
            a[i] = parseInt(a[i]);
        }
        return a;
    };

    var getMonthDays = function(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];
    };

    y = 0;
    m = 0;
    d = 0;
    var sTmp;
    var aTmp;
    sDate1 = fixDate(sDate1);
    sDate2 = fixDate(sDate2);
    if(sDate1 > sDate2){
   
        sTmp = sDate2;
        sDate2 = sDate1;
        sDate1 = sTmp;
    }
    var aDate1 = sDate1.split('-');
        aDate1 = fixInt(aDate1);
    var aDate2 = sDate2.split('-');
        aDate2 = fixInt(aDate2);
    //年份
    y = aDate2[0] - aDate1[0];
    if( sDate2.replace(aDate2[0],'') < sDate1.replace(aDate1[0],'')){
   
        y = y - 1;
    }
    //月份
    aTmp = [aDate1[0]+y,aDate1[1],fixZero(aDate1[2])];
    while(true){
   
        if(aTmp[1] == 12){
   
            aTmp[0]++;
            aTmp[1] = 1;
        }else{
   
            aTmp[1]++;
        }
        if(([aTmp[0],fixZero(aTmp[1]),aTmp[2]]).join('-') <= sDate2){
   
            m++;
        } else {
   
            break;
        }
    }
    //天数
    aTmp = [aDate1[0]+y,aDate1[1]+m,aDate1[2]];
    if(aTmp[1] > 12){
   
        aTmp[0]++;
        aTmp[1] -= 12;
    }
    while(true){
   
        if(aTmp[2] == getMonthDays(aTmp[0],aTmp[1])){
   
            aTmp[1]++;
            aTmp[2] = 1;
        } else {
   
            aTmp[2]++;
        }
        sTmp = ([aTmp[0],fixZero(aTmp[1]),fixZero(aTmp[2])]).join('-');
        if(sTmp <= sDate2){
   
            d++;
        } else {
   
            break;
        }
    }
    //return {y:y,m:m,d:d};
};

/*
var aTest = [
    ['1984-9-17','2015-8-15'],
    ['1984-9-17','1985-9-18'],
    ['1984-9-17','1984-10-17'],
    ['1984-9-17','1984-10-10'],
];
var timeTest = new String("");
for(var i = 0; i < aTest.length; i++){
    console.log(aTest[i][0]+':'+aTest[i][1]);
    console.log(getDiffYmdBetweenDate(aTest[i][0],aTest[i][1]));
    timeTest = timeTest + "相差" + y + "年" + m + "月" + d + "天";
}
*/

2、计算阴历时间间隔/阴历阳历生日转换(需要考虑闰年和闰月及天干地支等传统描述)的PHP代码:

    <?php
    /**
     * 阴历,阳历,日历转换
     */
    class o_calendar {
   
        public static $MIN_YEAR = 1600;
        public static $MAX_YEAR = 2200;
        //public static $lunarInfo = array(array(0,2,9,21936),array(6,1,30,9656),array(0,2,17,9584),array(0,2,6,21168),array(5,1,26,43344),array(0,2,13,59728),array(0,2,2,27296),array(3,1,22,44368),array(0,2,10,43856),array(8,1,31,19304),array(0,2,19,19168),array(0,2,8,42352),array(5,1,29,21096),array(0,2,16,53856),array(0,2,4,55632),array(4,1,25,27304),array(0,2,13,22176),array(0,2,2,39632),array(2,1,22,19176),array(0,2,10,19168),array(6,1,30,42200),array(0,2,18,42192),array(0,2,6,53840),array(5,1,26,54568),array(0,2,14,46400),array(0,2,3,54944),array(2,1,23,38608),array(0,2,11,38320),array(7,2,1,18872),array(0,2,20,18800),array(0,2,8,42160),array(5,1,28,45656),array(0,2,16,27216),array(0,2,5,27968),array(4,1,24,44456),array(0,2,13,11104),array(0,2,2,38256),array(2,1,23,18808),array(0,2,10,18800),array(6,1,30,25776),array(0,2,17,54432),array(0,2,6,59984),array(5,1,26,27976),array(0,2,14,23248),array(0,2,4,11104),array(3,1,24,37744),array(0,2,11,37600),array(7,1,31,51560),array(0,2,19,51536),array(0,2,8,54432),array(6,1,27,55888),array(0,2,15,46416),array(0,2,5,22176),array(4,1,25,43736),array(0,2,13,9680),array(0,2,2,37584),array(2,1,22,51544),array(0,2,10,43344),array(7,1,29,46248),array(0,2,17,27808),array(0,2,6,46416),array(5,1,27,21928),array(0,2,14,19872),array(0,2,3,42416),array(3,1,24,21176),array(0,2,12,21168),array(8,1,31,43344),array(0,2,18,59728),array(0,2,8,27296),array(6,1,28,44368),array(0,2,15,43856),array(0,2,5,19296),array(4,1,25,42352),array(0,2,13,42352),array(0,2,2,21088),array(3,1,21,59696),array(0,2,9,55632),array(7,1,30,23208),array(0,2,17,22176),array(0,2,6,38608),array(5,1,27,19176),array(0,2,15,19152),array(0,2,3,42192),array(4,1,23,53864),array(0,2,11,53840),array(8,1,31,54568),array(0,2,18,46400),array(0,2,7,46752),array(6,1,28,38608),array(0,2,16,38320),array(0,2,5,18864),array(4,1,25,42168),array(0,2,13,42160),array(10,2,2,45656),array(0,2,20,27216),array(0,2,9,27968),array(6,1,29,44448),array(0,2,17,43872),array(0,2,6,38256),array(5,1,27,18808),array(0,2,15,18800),array(0,2,4,25776),array(3,1,23,27216),array(0,2,10,59984),array(8,1,31,27432),array(0,2,19,23232),array(0,2,7,43872),array(5,1,28,37736),array(0,2,16,37600),array(0,2,5,51552),array(4,1,24,54440),array(0,2,12,54432),array(0,2,1,55888),array(2,1,22,23208),array(0,2,9,22176),array(7,1,29,43736),array(0,2,18,9680),array(0,2,7,37584),array(5,1,26,51544),array(0,2,14,43344),array(0,2,3,46240),array(4,1,23,46416),array(0,2,10,44368),array(9,1,31,21928),array(0,2,19,19360),array(0,2,8,42416),array(6,1,28,21176),array(0,2,16,21168),array(0,2,5,43312),array(4,1,25,29864),array(0,2,12,27296),array(0,2,1,44368),array(2,1,22,19880),array(0,2,10,19296),array(6,1,29,42352),array(0,2,17,42208),array(0,2,6,53856),array(5,1,26,59696),array(0,2,13,54576),array(0,2,3,23200),array(3,1,23,27472),array(0,2,11,38608),array(11,1,31,19176),array(0,2,19,19152),array(0,2,8,42192),array(6,1,28,53848),array(0,2,15,53840),array(0,2,4,54560),array(5,1,24,55968),array(0,2,12,46496),array(0,2,1,22224),array(2,1,22,19160),array(0,2,10,18864),array(7,1,30,42168),array(0,2,17,42160),array(0,2,6,43600),array(5,1,26,46376),array(0,2,14,27936),array(0,2,2,44448),array(3,1,23,21936),array(0,2,11,37744),array(8,2,1,18808),array(0,2,19,18800),array(0,2,8,25776),array(6,1,28,27216),array(0,2,15,59984),array(0,2,4,27424),array(4,1,24,43872),array(0,2,12,43744),array(0,2,2,37600),array(3,1,21,51568),array(0,2,9,51552),array(7,1,29,54440),array(0,2,17,54432),array(0,2,5,55888),array(5,1,26,23208),array(0,2,14,22176),array(0,2,3,42704),array(4,1,23,21224),array(0,2,11,21200),array(8,1,31,43352),array(0,2,19,43344),array(0,2,7,46240),array(6,1,27,46416),array(0,2,15,44368),array(0,2,5,21920),array(4,1,24,42448),array(0,2,12,42416),array(0,2,2,21168),array(3,1,22,43320),array(0,2,9,26928),array(7,1,29,29336),array(0,2,17,27296),array(0,2,6,44368),array(5,1,26,19880),array(0,2,14,19296),array(0,2,3,42352),array(4,1,24,21104),array(0,2,10,53856),array(8,1,30,59696),array(0,2,18,54560),array(0,2,7,55968),array(6,1,27,27472),array(0,2,15,22224),array(0,2,5,19168),array(4,1,25,42216),array(0,2,12,42192),array(0,2,1,53584),array(2,1,21,55592),array(0,2,9,54560));
        public static $lunarInfo = array(array(0,2,15,9680),array(0,2,3,37584),array(3,1,23,51544),array(0,2,11,43344),array(7,1,31,46248),array(0,2,18,27296),array(0,2,7,44368),array(6,1,28,21928),array(0,2,16,19360),array(0,2,4,42416),array(4,1,25,21176),array(0,2,13,21168),array(0,2,2,26928),array(2,1,21,29864),array(0,2,9,27296),array(6,1,29,44368),array(0,2,17,39760),array(0,2,6,19296),array(4,1,26,42352),array(0,2,14,42224),array(0,2,4,21088),array(3,1,22,59696),array(0,2,10,54576),array(8,1,31,23208),array(0,2,19,22176),array(0,2,7,38608),array(5,1,28,19176),array(0,2,16,19152),array(0,2,5,42192),array(4,1,24,53864),array(0,2,12,45648),array(0,2,1,54560),array(2,1,21,55968),array(0,2,8,46496),array(6,1,29,38352),array(0,2,17,38320),array(0,2,7,18864),array(5,1,26,42168),array(0,2,14,42160),array(0,2,3,43600),array(3,1,23,46376),array(0,2,10,27968),array(0,1,30,44448),array(0,2,18,43872),array(0,2,8,37744),array(5,1,28,18808),array(0,2,16,18800),array(0,2,5,25776),array(4,1,25,27216),array(0,2,11,55888),array(0,2,1,27424),array(1,1,21,43872),array(0,2,9,43744),array(6,1,29,37608),array(0,2,17,37600),array(0,2,6,51552),array(5,1,26,54440),array(0,2,13,54432),array(0,2,2,55888),array(3,1,23,23208),array(0,2,11,22176),array(8,1,30,42704),array(0,2,18,42448),array(0,2,8,37584),array(6,1,28,43352),array(0,2,15,43344),array(0,2,4,46240),array(4,1,24,46416),array(0,2,12,44368),array(0,2,1,21920),array(2,1,21,42448),array(0,2,9,42416),array(7,1,30,21176),array(0,2,17,21104),array(0,2,6,26928),array(5,1,26,29864),array(0,2,14,27296),array(0,2,2,44368),array(3,1,23,19880),array(0,2,11,19296),array(8,1,31,42352),array(0,2,18,42208),array(0,2,7,53856),array(6,1,27,59696),array(0,2,15,54560),array(0,2,3,55968),array(4,1,24,23376),array(0,2,12,22224),array(0,2,2,19168),array(3,1,21,42216),array(0,2,9,42192),array(7,1,29,53848),array(0,2,17,43600),array(0,2,5,46368),array(5,1,25,54944),array(0,2,13,46496),array(0,2,3,21968),array(3,1,23,19160),array(0,2,11,18864),array(7,1,31,42168),array(0,2,19,42160),array(0,2,8,43600),array(6,1,28,46376),array(0,2,16,27936),array(0,2,5,44384),array(4,1,25,21936),array(0,2,13,37744),array(0,2,3,18800),array(3,1,23,42168),array(0,2,10,25776),array(7,1,30,27216),array(0,2,17,55888),array(0,2,7,23200),array(5,1,26,43856),array(0,2,14,43744),array(0,2,4,21216),array(3,1,24,51568),array(0,2,11,51552),array(8,1,31,54440),array(0,2,19,54432),array(0,2,8,54608),array(6,1,28,23208),array(0,2,16,22176),array(0,2,5,42704),array(4,1,26,21224),array(0,2,13,21200),array(0,2,2,43344),array(2,1,22,54440),array(0,2,10,45728),array(7,1,29,46416),array(0,2,17,44368),array(0,2,7,
  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值