javaScript的时间操作

Date对象用于处理日期与时间。
时间对象文档: https://www.runoob.com/jsref/jsref-obj-date.html

获取时间对象

var d = new Date(); //当前时间
//时间戳获取时间对象
var d = new Datel(milliseconds);
//字符串时间转成时间对象
var d = new Date(dateString);
//依次指定年月日时分秒毫秒
var d = new Date(year, month, day, hours, minutes, seconds, milliseconds);

Date对象常用api

  • getTime():返回时间戳
  • getDate(): 从Date对象返回一个月中的某一天(1 ~ 31)。
  • getDayO:从Date对象返回-周中的某一天(0 ~ 6)。[依次还有返回年、 月份(注意数值需要加一)、 小时、分钟、秒等等]
  • parse(): 返回指定日期(字符串)的时间戳。
    var d = Date.parse("March 21,2012");
    

Date和String互转

时间转字符串

对Date进行扩展,增加format方法。以后调用Date对象的format方法即可将日期转换成我们指定格式的 字符串(String) 。 具体见下面的时间工具类。

字符串转时间

//字符串时间转成时间对象
var d = new Date(dateString);

时间加减、比较大小、时间差

时间大小

Date对象之间直接比较大小
转换成时间戳比较大小

时间加减

原理在于Date对象的setXXX方法,将对应的时间重新赋值。

//在原来时间的基础.上加1天,其他同理
date.setDate(date.getDate() + 1)
//在原来的基础上加上一个月,如果当前月12月的话,年会自动加上一年。
date.setMonth(date.getMonth() + 1)

时间减的话直接换成负数,天数减到0的话会跳转到上一个月。

求时间差

原理:计算出两个时间的时间戳,求出时间戳的差, 这就是两个时间相差的毫秒数,然后根据需要计算出秒、分钟、小时等数据。 .

##总结的时间工具类
下面是个人整理的时间Date类型操作的工具类

/*
时间格式常量
 */
const DateFormat = {
//年月日时分秒毫秒
    YYYY_MM_DD_HH_MM_SS_S: "yyyy-MM-dd hh:mm:ss:S",
//年月日时分秒
    YYYY_MM_DD_HH_MM_SS: "yyyy-MM-dd hh:mm:ss",
//年月日时分
    YYYY_MM_ DD_HH_MM
:
"yyyy-MM-dd hh:mm
//年月日时
YYYY_MM_DD_HH: "yyyy-MM-dd hh",
//年月日
    YYYY_MM_DD
:
"yyyy-MM-dd,
//年月
YYYY_MM: "yyyy-MM",
}

/*
给Date对象增加format方法:格式化时间,
返回String,参数请参考DateFormat中的常量
*/
Date.prototype.format = function (fmt) {
    var o = {
        "M+": this.getMonth() + 1,//月份.
        "d+": this.getDate(), //日
        "h+": this.getHours(), //小时
        "m+": this.getMinutes(), //分
        "s+": this.getSeconds(), //秒
        "q+": Math.floor((this.getMonth() + 3) / 3), //季度
        "S": this.getMilliseconds() //毫秒
    };

    if (/(y+)/.test(fmt)) {
        fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
    }

    for (var k in o) {
        if (new RegExp("(" + k + ")").test(fmt)) {
            fmt = fmt.replace(RegExp.S1, (RegExp.$1.length == 1) ? (o[k]) : ("00" + o[k]).substr(("" + o[k]).length));
        }
    }
    return fmt;
}
/*
增加num年
*/
Date.prototype.addYear = function (num) {
    if (isNaN(num)) num = 0;
    this.setFullYear(this.getFullYear() + num);
}
/*
增加num月
*/
Date.prototype.addMonth = function (num) {
    if (isNaN(num)) num = 0;
    this.setMonth(this.getMonth() + num);
}
/*
增加num天
*/
Date.prototype.addDate = function (num) {
    if (isNaN(num)) num = 0;
    this.setDate(this.getDate() + num);
}
/*
增加num小时
*/
Date.prototype.addHours = function (num) {
    if (isNaN(num)) num = 0;
    this.setHours(this.getHours() + num);
}
/*
增加num分钟
*/
Date.prototype.addMinutes = function (num) {
    if (isNaN(num)) num = 0;
    this.setMinutes(this.getMinutes() + num);
}
/*
增加num秒
*/
Date.prototype.addSeconds = function (num) {
    if (isNaN(num)) num = 0;
    this.setSeconds(this.getSeconds() + num);
}
/*计算Date的时间差
这里年月日时分秒的时间差计算精度在小数点后四
位,
如果业务需要一天半算一 天或者两天的话,
可以使用Math中的向.上或向下取整的方法获取。
*/
const DateDifference = {
//计算相差年(365天)
    computeYear: (start, end) => {
        if (start instanceof Date && end instanceof Date) {
            const difference = Math.abs(end.getTime() - start.getTime());
            //保留四位小数
            const year = Math.round(difference / (1000 * 60 * 60 * 24 * 365) * 10000) / 10000;
            return year;
        }
        console.error("两个参数必须都为Date类型");
        return 0;
    },
    //计算相差月(30天)
    computeMonth: (start, end) => {
        if (start instanceof Date && end instanceof Date) {
            const difference = Math.abs(end.getTime() - start.getTime());
            //保留四位小数
            const month = Math.round(difference / (1000 * 60 * 60 * 24 * 30) * 10000) / 10000;
            return month;
        }
        console.error("两个参数必须都为Date类型");
        return 0;
    },
    //计算相差日
    computeDate: (start, end) => {
        if (start instanceof Date && end instanceof Date) {
            const difference = Math.abs(end.getTime() - start.getTime());
            //保留四位小数
            const day = Math.round(difference / (1000 * 60 * 60 * 24) * 10000) / 10000;
            return day;
        }
        console.error("两个参数必须都为Date类型");
        return 0;
    },
    //计算相差小时
    computeHours: (start, end) => {
        if (start instanceof Date && end instanceof Date) {
            const difference = Math.abs(end.getTime() - start.getTime());
            //保留四位小数
            const hour = Math.round(difference / (1000 * 60 * 60) * 10000) / 10000;
            return hour;
        }
        console.error("两个参数必须都为Date类型");
        return 0;
    },
    //计算相差分钟
    computeMinutes: (start, end) => {
        if (start instanceof Date && end instanceof Date) {
            const difference = Math.abs(end.getTime() - start.getTime());
            //保留四位小数
            const minute = Math.round(difference / (1000 * 60) * 10000) / 10000;
            return minute;
        }
        console.error("两个参数必须都为Date类型");
        return 0;
    },
    //计算相差秒
    computeSeconds: (start, end) => {
        if (start instanceof Date && end instanceof Date) {
            const difference = Math.abs(end.getTime() - start.getTime());
            //保留四位小数
            const second = Math.round(difference / (1000) * 10000) / 10000;
            return second;
        }
        console.error("两个参数必须都为Date类型");
        return 0;
    },
    //计算时间差:日、时、分、秒、毫秒
    compute: (start, end) => {
        if (start instanceof Date && end instanceof Date) {
            const difference = Math.abs(end.getTime() - start.getTime());
            const dayDiff = Math.floor(difference / (24 * 60 * 60 * 1000)); //相差天数
            //计算天数后剩余的毫秒数
            const leave1 = difference % (24 * 60 * 60 * 1000);
            //相差小时数
            const hourDiff = Math.floor(leave1 / (60 * 60 * 1000));
            //计算小时数后剩余的毫秒数
            const leave2 = leave1 % (60 * 60 * 1000);
            //相差分钟数
            const minuteDiff = Math.floor(leave2 / (60 * 1000));
            //计算分钟数后剩余的毫秒数
            const leave3 = leave2 % (60 * 1000);
            const SecondDiff = Math.floor(leave3 / (1000));//相差秒数
            //计算秒数后剩余的毫秒数
            const leave4 = leave3 % (1000);
            return [dayDiff, hourDiff, minuteDiff, SecondDiff, leave4];
        }
        console.error("两个参数必须都为Date类型");
        return [0, 0, 0, 0, 0]
    }
}










你可能感兴趣的:(javaScript,javascript)