js获取两个时间的差值

发布时间 2023-03-23 09:28:12作者: じ逐梦

1、两个时间差值

/**
 * //获取两个日期的相差日期数
 * @param {any} firstDate 开启时间 2022-03-23 00:03:00
 * @param {any} secondDate 结束时间 2023-03-23 00:04:00
 * @param {any} differ(differ 1.相差天数; 2.相差小时数; 3.相差分钟数; 4.相差秒数)
 */
function date_getdiffer_date(firstDate, secondDate, differ) {
    //1)将两个日期字符串转化为日期对象
    var startDate = new Date(this.date_ios_format(firstDate));
    var endDate = new Date(this.date_ios_format(secondDate));
    //2)计算两个日期相差的毫秒数
    var msecNum = endDate.getTime() - startDate.getTime();
    //3)计算两个日期相差的天数
    var dayNum = Math.floor(msecNum / this.date_getdiffer_scale(differ));
    //console.log(firstDate + "," + secondDate + "," + differ + "," + dayNum)
    return dayNum;
}

/**
     * @function   
     * @name date_ios_format
     * @desc 解决日期字符串在IOS中显示为NaN的问题
     */
function date_ios_format(datestr) {
    return datestr.replace(/\-/g, "/");
}

/**
 * //获取与毫秒数的转化比例
 * @param {any} value(1.相差天数; 2.相差小时数; 3.相差分钟数; 4.相差秒数)
 */
function date_getdiffer_scale(value) {
    var format;
    //获取转化比(天数跟毫秒数的比例)
    if (value == 1) {
        format = parseFloat(24 * 60 * 60 * 1000);
    }
    //获取转化比(小时数跟毫秒数的比例)
    else if (value == 2) {
        format = parseFloat(60 * 60 * 1000);
    }
    //获取转化比(分钟数跟毫秒数的比例)
    else if (value == 3) {
        format = parseFloat(60 * 1000);
    }
    //获取转化比(秒数跟毫秒数的比例)
    else if (value == 4) {
        format = parseFloat(1000);
    }
    return format;
}

2、比较两个日期的天数差,(不比较时分秒)

/**
 * 比较两个日期的天数差,不比较时分秒
 * @param {any} date1 时间1字符串
 * @param {any} date2 时间1字符串
 */
function us_differ_day(date1, date2) {
    //console.log("us_differ_day="+date1)
    var sdate = new Date(this.date_ios_format(date1));
    var edate = new Date(this.date_ios_format(date2));
    var sd = this.us_date_format(sdate, "yyyy-MM-dd")
    var ed = this.us_date_format(edate, "yyyy-MM-dd")
    sdate = new Date(sd);
    edate = new Date(ed);
    var datespan = edate - sdate;
    datespan = Math.abs(datespan);
    var idays = Math.floor(datespan / (24 * 3600 * 1000));
    return idays;
}

/**
 * @function   
 * @name date_ios_format
 * @desc 解决日期字符串在IOS中显示为NaN的问题
 */
function date_ios_format(datestr) {
    return datestr.replace(/\-/g, "/");
}

/**
* @function
* @name us_date_format
* @param {string} _date - 时间  不是时间字符串需要new Date("2022-03-23 01:02:03")
* @param {string} fmt - 格式化 yyyy-MM-dd hh:mm:ss
* @desc 返回时间字符串
*/
function us_date_format(_date, fmt) {
    //console.log(_date);
    if (fmt == undefined) {
        fmt = "yyyy-MM-dd hh:mm:ss";
    }
    var o = {
        "M+": _date.getMonth() + 1, //月份
        "d+": _date.getDate(), //
        "h+": _date.getHours(), //小时
        "m+": _date.getMinutes(), //
        "s+": _date.getSeconds(), //
        "q+": Math.floor((_date.getMonth() + 3) / 3), //季度
        "S": _date.getMilliseconds() //毫秒
    };
    if (/(y+)/.test(fmt)) {
        fmt = fmt.replace(RegExp.$1, (_date.getFullYear() + "").substr(4 - RegExp.$1.length));
    }
    for (var k in o) {
        if (new RegExp("(" + k + ")").test(fmt)) {
            fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k])
                .length)));
        }
    }
    //console.log(fmt);
    return fmt;
}

两种方法的区别

var starttime ="2023-03-23 00:00:01";
var endtime ="2023-03-24 00:00:00"

//1.相差天数; 2.相差小时数; 3.相差分钟数; 4.相差秒数
var ilength = date_getdiffer_date(starttime, endtime, 1); //结果是1    比较时分秒
var ilength1 =us_differ_day(starttime, endtime);//结果是0              不计较时分秒