美文网首页
日期相关的一些简单计算:格式化,上个月,前一天

日期相关的一些简单计算:格式化,上个月,前一天

作者: 零之彼岸 | 来源:发表于2019-01-06 11:09 被阅读0次

关于日期计算,做个小笔记。

格式化

Date.prototype.formatStr = function(format) {
    var o = {
        "M+": this.getMonth() + 1, // month
        "D+": this.getDate(), // day
        "h+": this.getHours(), // hour
        "m+": this.getMinutes(), // minute
        "s+": this.getSeconds(), // second
        "q+": Math.floor((this.getMonth() + 3) / 3), // quarter,季度
        "S": this.getMilliseconds()
    };

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

    for (var k in o) {
        if (new RegExp("(" + k + ")").test(format)) {
            format = format.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k] : padLeftZero(o[k]);
        }
    }
    return format;
    
    // 左侧补零
    function padLeftZero (str) {
        return ('00' + str).substr((str + '').length);
    }
};

上个月

var now = new Date();
var fullyear = now.getFullYear();
var month = now.getMonth();

// 上个月第一天
var prevMonthFirst = new Date(fullyear, month - 1, 1);

// 上个月有多少天
// new Date(2019, 1, 0).getDate(); // 表示 2019/1/1的前一天,即 2018/12/31,通常用这个来计算某月的天数
var prevMonthDays = new Date(fullyear, month, 0).getDate();

// 上个月最后一天
var prevMonthLast = new Date(fullyear, month -1, prevMonthDays).formatStr('YYYY-MM-DD');

根据上面的规律,可计算得到下个月。简单封装一个方法,求:获取给定日期的指定月份的开始、结束日期

function getMonthByDate (date, months, formate) {
    formate = formate || "YYYY-MM-DD";
    date = new Date(date.replace(/-/g, "/"));
    var fullyear = date.getFullYear();
    var month = date.getMonth() + months;
    
    // 指定月第一天
    var monthFirst = new Date(fullyear, month, 1).formatStr(formate);
    
    // 指定月有多少天
    // new Date(2019, 1, 0).getDate(); // 表示 2019/1/1的前一天,即 2018/12/31,通常用这个来计算某月的天数
    var monthDays = new Date(fullyear, month + 1, 0).getDate();
    
    // 指定月最后一天
    var monthLast = new Date(fullyear, month, monthDays).formatStr(formate);
    
    return {
        first: monthFirst,
        last: monthLast
    }
};

// 举例
getMonthByDate('2018-9-17', -1); // 上个月 {first: "2018-08-01", last: "2018-08-31"}

getMonthByDate('2018-9-17', -2); // {first: "2018-07-01", last: "2018-07-31"}

getMonthByDate('2018-9-17', -3); // {first: "2018-06-01", last: "2018-06-30"}

getMonthByDate('2018-9-17', -7); // {first: "2018-02-01", last: "2018-02-28"}

getMonthByDate('2018-9-17', 1); // 下个月 {first: "2018-10-01", last: "2018-10-31"}

getMonthByDate('2018-9-17', 2); // {first: "2018-11-01", last: "2018-11-30"}

前一天

var now = new Date();

// 前一天
var prevDate = new Date(now.setDate(now.getDate() - 1)).formatStr('YYYY-MM-DD');

前一天比较简单,也简单封装一个方法,求:获取给定日期加指定天数的日期

function getNewDateByDate (date, days, formate) {
    formate = formate || "YYYY-MM-DD";
    date = new Date(date.replace(/-/g, "/"));
    return new Date(date.setDate(date.getDate() + days)).formatStr(formate);
}

举例:
getNewDateByDate('2019-1-4', -1); // 前一天,"2019-01-03"
getNewDateByDate('2019-1-4', 1); // 后一天,"2019-01-05"

日期比较

new Date('2019-01-03') - new Date('2019-01-02'); // 86400000

new Date('2019-01-03') - new Date('2019-01-04'); // -86400000

// 日期比较
function compareDate (strDate1, strDate2) {
    var date1 = new Date(strDate1.replace(/\-/g, '\/'));
    var date2 = new Date(strDate2.replace(/\-/g, '\/'));
    
    return date1 - date2;
};

// 举例:
compareDate('2019-01-03', '2019-01-02') > 0; // true

compareDate('2019-01-03', '2019-01-04') < 0; // true

获取开始、结束时间间隔的具体日期,包括开始结束

function getIntervalDays (beginDate, endDate, formate) {
    var oneDayMilliseconds = 24 * 60 * 60 * 1000;
    var intervalDays = Math.abs(compareDate(beginDate, endDate)) / oneDayMilliseconds;
    
    var dates = [];
    for (var i = 0; i <= intervalDays; i++) {
        dates.push(getNewDateByDate(beginDate, i, formate));
    }
    
    return dates;
}

// 举例
getIntervalDays('2019-01-03', '2019-01-04'); // ["2019-01-03", "2019-01-04"]

getIntervalDays('2019-01-01', '2019-01-04'); // ["2019-01-01", "2019-01-02", "2019-01-03", "2019-01-04"]

相关文章

  • 日期相关的一些简单计算:格式化,上个月,前一天

    关于日期计算,做个小笔记。 格式化 上个月 根据上面的规律,可计算得到下个月。简单封装一个方法,求:获取给定日期的...

  • PHP和GO的常用函数对比

    时间日期相关 获取当前时间戳 自定义时间 格式化输出时间戳 字符串格式成日期 日期计算 给定日期计算前后多少天的日...

  • JS、JAVA、MYSQL时间日期

    --文章内容总结了包括JS、JAVA、MYSQL从前端到数据库的所有日期相关常用操作,包括日期格式化和日期计算以及...

  • cgai-time一个简单又实用的时间日期处理python库

    一、简介 cgai-time一个简单又实用的时间日期处理python库,可以快速实现: 日期格式化 日期,时间计算...

  • 常用函数列表

    日期相关函数 日期格式化DATE_FORMAT(date,format)

  • 日期格式处理 data对象 年月日

    对时间的各种格式化,datepicker插件以及原声的日期对象格式化,相对于当前日期的前一天,前一周的日期获取, ...

  • SQL日期函数详解与实战

    编写SQL中经常可以遇到日期的格式化与日期相关函数,这篇文章中我们将整理一下相关函数并给出一些实例供参考 获取时间...

  • moment

    moment官方文档 几个方法: (1) 日期格式化 (2) 相对日期 快捷的时间转化-moment 转化: 计算:

  • JS计算日期时间

    计算自然月、指定自然月某一天、获取前一天和后一天、判断闰年、月初、月末最后一天日期,代码如下: //时间格式化 f...

  • 函数集

    查询当天的日期 后一天的日期 前一天的日期的 一维对象长度的计算

网友评论

      本文标题:日期相关的一些简单计算:格式化,上个月,前一天

      本文链接:https://www.haomeiwen.com/subject/iatsrqtx.html