当前位置 : 主页 > 网络编程 > JavaScript >

js Date对象扩展

来源:互联网 收集:自由互联 发布时间:2021-06-30
gistfile1.txt /** * 当前日期增减指定天数后,返回新日期 * @param {Number} days 可正可负,参考C# DateTime.AddDays方法 * @returns {Date} 结果日期 */Date.prototype.addDays = function(days) { return new Date(this.ge
gistfile1.txt
/**
 * 当前日期增减指定天数后,返回新日期
 * @param {Number} days 可正可负,参考C# DateTime.AddDays方法
 * @returns {Date} 结果日期
 */
Date.prototype.addDays = function(days) {
    return new Date(this.getTime() + days * 24 * 60 * 60 * 1000);
}

/**
 * 当前日期增减指定月分数后,返回新日期
 * @param {Number} months 可正可负,参考C# DateTime.AddMonths方法(处理了大小月份及闰年的情况)
 * @returns {Date} 结果日期
 */
Date.prototype.addMonths = function (months) {

    var maxDayOfMonths = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
    var isLeapYear = function(year) {
        return (year % 4 === 0) && (year % 100 !== 0 || year % 400 === 0);
    }

    var thisYear = this.getFullYear();
    var thisMonth = this.getMonth() + 1;
    var thisDate = this.getDate();

    var newMonth = thisMonth + months;
    var newYear = thisYear;
    var newDate = thisDate;

    if (newMonth > 12) {
        newYear += Math.floor(newMonth / 12);
        newMonth = newMonth % 12;
    }
    if (newMonth <= 0) {
        newYear += (0 - (Math.floor(Math.abs(newMonth) / 12) + 1));
        newMonth = 12 - Math.abs(newMonth) % 12;
    }

    //处理天数是否合法
    var maxDay = maxDayOfMonths[newMonth - 1];
    (isLeapYear(newYear) && newMonth === 2) && (maxDay += 1);
    (newDate > maxDay) && (newDate = maxDay);

    return new Date(Date.parse(newYear + '-' + newMonth + '-' + newDate));
}
网友评论