JS对时间对象Date的简单增强

/* 格式化 */
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.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
        }
    }

    return fmt;
}

/* 日期格式 */
Date.prototype.formatDate_ = function () {
    return this.format_("yyyy-MM-dd");
}

/* 日期中文格式 */
Date.prototype.formatDateCN_ = function () {
    return this.format_("yyyy年MM月dd日");
}

/* 时间格式 */
Date.prototype.formatTime_ = function () {
    return this.format_("yyyy-MM-dd hh:mm:ss");
}

/* 时间中文格式 */
Date.prototype.formatTimeCN_ = function () {
    return this.format_("yyyy年MM月dd日 hh时mm分ss秒");
}


/* 前num秒或后num秒 */
Date.prototype.moveSecond_ = function (num) {
    return new Date(this.getTime() + num * 1000);
}

/* 前num分钟或后num分钟 */
Date.prototype.moveMinute_ = function (num) {
    return new Date(this.getTime() + num * 60 * 1000);
}

/* 前num小时或后num小时 */
Date.prototype.moveHour_ = function (num) {
    return new Date(this.getTime() + num * 60 * 60 * 1000);
}

/* 前num天或后num天 */
Date.prototype.moveDay_ = function (num) {
    return new Date(this.getTime() + num * 24 * 60 * 60 * 1000);
}

/* 前num月或后num月 */
Date.prototype.moveMonth_ = function (num) {
    return new Date(this.setMonth(this.getMonth() + num));
}

/* 前num年或后num年 */
Date.prototype.moveYear_ = function (num) {
    debugger;
    return new Date(this.setFullYear(this.getFullYear() + num));
}

/* 当前月的第一天 */
Date.prototype.getFirstDayOfMonth_ = function () {
    return new Date(this.setDate(1));
}

/* 当前月的最后一天 */
Date.prototype.getLastDayOfMonth_ = function () {
    return new Date(this.moveMonth_(1).setDate(0));
}

/* 当前月的总天数 */
Date.prototype.getTotalDayOfMonth_ = function () {
    return this.getLastDayOfMonth_().getDate();
}

/* 当前天是该年的第几周 */
Date.prototype.getWeekNumOfYear_ = function () {
    let firstDayOfYear = new Date(this.getFullYear(), 0, 1);
    let msDiff = this.getTime() - firstDayOfYear.getTime();
    let weekNum = msDiff / (7 * 24 * 60 * 60 * 1000);
    return Math.ceil(weekNum);
}

/* 本月第一个周几 */
Date.prototype.getFirstWhichDayOfMonth_ = function (dayNum) {
    let firstDay = this.getFirstDayOfMonth_();
    let final = (8 - firstDay.getDay() + dayNum) % 7;

    if(final === 0){
        final = 7;
    }

    return new Date(this.setDate(final));
}

/* 本月最后一个周几 */
Date.prototype.getLastWhichDayOfMonth_ = function (dayNum) {

    if(dayNum === 0){
        dayNum = 7;
    }

    let lastDay = this.getLastDayOfMonth_();
    let final = (lastDay.getDay() - dayNum + 7) % 7;

    return new Date(this.setDate(-final));
}

/* 本月第几个周几 */
Date.prototype.getNumWhichDayOfMonth_ = function (num, dayNum) {
    let firstDay = this.getFirstDayOfMonth_();
    let final = (8 - firstDay.getDay() + dayNum) % 7;

    if(final === 0){
        final = 7;
    }

    return new Date(this.setDate(final + 7 * (num - 1)));
}

/* 日期之差 */
Date.prototype.minus_ = function (otherDate) {

    let msDiff = Math.abs(this.getTime() - otherDate.getTime());
    
    return {
        "DAY": msDiff / (24 * 60 * 60 * 1000),
        "HOUR": msDiff / (60 * 60 * 1000),
        "MINUTE": msDiff / (60 * 1000),
        "SECOND": msDiff / 1000,
    }
}

简单例子
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值