JS 时间差计算

编写函数,要求传入两个日期时间,返回两个日期时间之间,相差多少天多少小时多少分钟,多少秒。

1、首先我们先获取两个日期时间:

var res = dateReduce({ 
            start :[2020,3,610,20,18],     // 起始时间;
            end   : [2020,3,9]     // 终止时间
        });

2、因为我们输入的方式是数组,且存在时分秒,我们需要格式化一下数组日期:判定数组的长度,根据数组的长度格式化成字符串再进行计算:
而且用户可能写时分秒,也可能不写,所以我们分成两种情况来判断,对于存在多种情况的判定,建议大家用switch来写,以便后期进行修改或添加情况。

代码如下:

function formateDateArray( arr ){
            var date_str = "";
            switch(arr.length){
                // 只有年月日;
                case 3 : 
                    date_str = arr.join("/");
                    break;
                case 6 : 
                    // yyyy/mm/dd hh:mm:ss
                    date_str = arr.slice(0,3).join("/");
                    date_str += " " + arr.slice(3).join(":")
                    break;
            }
            return date_str;
        }

3、然后就是计算我们的时间差了



function dateReduce( options ){

         var start_str = formateDateArray(options.start);

         var start_d   = new Date(start_str);

         var end_str   = formateDateArray(options.end);

        var end_d     = new Date(end_str);

   var reduce_ms = end_d.getTime() - start_d.getTime();

            // 返回天,小时分钟秒;

       return {

                days  : parseInt(reduce_ms / 1000 / 3600 / 24),

                hours : parseInt(reduce_ms / 1000 / 3600 % 24),

                min   : parseInt(reduce_ms / 1000 / 60 % 60),

                sec   : parseInt(reduce_ms / 1000 % 60 )

            }
    }
    console.log(res);

运行代码截图:

在这里插入图片描述

最后给大家在拓展一下这个函数的功能:

我们可以不输入起始时间,只输入结束时间,这样就可以有一个简单的倒计时作用。

  var res = dateReduce({ 
            start : "now",     // 起始时间;
            end   : [2020,3,9]     // 终止时间;        
        });

例如上述代码,我们将start设置为now或者不输入都行。然后在判定的时候利用if来判定是当前的时间还是设置的起始时间即可。

if(options.start === undefined || typeof options.start === "string"){
                start_d = new Date();
            }else{
                var start_str = formateDateArray(options.start);
                var start_d   = new Date(start_str);
            }

运行结果:

在这里插入图片描述

剩余12小时20分19秒到达3月9号。再次刷新之后;

在这里插入图片描述

可以看到时间剩下12小时16分49秒

大家也可以在此基础上继续扩展,封装函数也是一个功能很多的工具哦。

附上源代码(增加功能之后的):


function dateReduce( options ){

   if(options.start === undefined || typeof options.start === "string"){ start_d = new Date();

            }else{

                var start_str = formateDateArray(options.start);

                var start_d   = new Date(start_str);

            }

            var end_str   = formateDateArray(options.end);

            var end_d     = new Date(end_str);

            var reduce_ms = end_d.getTime() - start_d.getTime();

            // 返回天,小时分钟秒;

            return {

                days  : parseInt(reduce_ms / 1000 / 3600 / 24),

                hours : parseInt(reduce_ms / 1000 / 3600 % 24),

                min   : parseInt(reduce_ms / 1000 / 60 % 60),

                sec   : parseInt(reduce_ms / 1000 % 60 )

            }

        }

        function formateDateArray( arr ){

            var date_str = "";

            switch(arr.length){

                // 只有年月日;

                case 3 : 

                    date_str = arr.join("/");

                    break;

                case 6 : 

                    // yyyy/mm/dd hh:mm:ss

                    date_str = arr.slice(0,3).join("/");

                    date_str += " " + arr.slice(3).join(":")

                    break;

            }

            return date_str;

        }

        var res = dateReduce({

            start : "now",

            end   : [2020,3,9]

           

        });

        console.log(res);

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值