日期格式化函数

日期格式化函数

来源于百度

Date.prototype.format = function (mask) {
    var d = this;
    var zeroize = function (value, length) {
        if (!length) length = 2;
        value = String(value);
        for (var i = 0, zeros = ''; i < (length - value.length); i++) {
            zeros += '0';
        }
        return zeros + value;
    };

    return mask.replace(/"[^"]*"|'[^']*'|\b(?:d{1,4}|m{1,4}|yy(?:yy)?|([hHMstT])\1?|[lLZ])\b/g, function ($0) {
        switch ($0) {
            case 'd': return d.getDate();
            case 'dd': return zeroize(d.getDate());
            case 'ddd': return ['Sun', 'Mon', 'Tue', 'Wed', 'Thr', 'Fri', 'Sat'][d.getDay()];
            case 'dddd': return ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'][d.getDay()];
            case 'M': return d.getMonth() + 1;
            case 'MM': return zeroize(d.getMonth() + 1);
            case 'MMM': return ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'][d.getMonth()];
            case 'MMMM': return ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'][d.getMonth()];
            case 'yy': return String(d.getFullYear()).substr(2);
            case 'yyyy': return d.getFullYear();
            case 'h': return d.getHours() % 12 || 12;
            case 'hh': return zeroize(d.getHours() % 12 || 12);
            case 'H': return d.getHours();
            case 'HH': return zeroize(d.getHours());
            case 'm': return d.getMinutes();
            case 'mm': return zeroize(d.getMinutes());
            case 's': return d.getSeconds();
            case 'ss': return zeroize(d.getSeconds());
            case 'l': return zeroize(d.getMilliseconds(), 3);
            case 'L': var m = d.getMilliseconds();
                if (m > 99) m = Math.round(m / 10);
                return zeroize(m);
            case 'tt': return d.getHours() < 12 ? 'am' : 'pm';
            case 'TT': return d.getHours() < 12 ? 'AM' : 'PM';
            case 'Z': return d.toUTCString().match(/[A-Z]+$/);
            // Return quoted strings with the surrounding quotes removed
            default: return $0.substr(1, $0.length - 2);
        }
    });
};

/**
 * 形成标准的 format 例如:"yyyy/MM/dd"   'yyyy-MM-dd HH:mm:ss'
 * @param {日期字符串|日期时间戳|Date} date
 * @param {日期格式化字符串} format
 */
function OrgDate (date, format) {
    if (!date) {
        date = new Date();
    }
    //默认标准 '2001/05/23'
    if (format == undefined || format == null || format == '') {
        format = "yyyy-MM-dd";
    }

    switch (typeof date) {
        case "string":
            date = new Date(date.replace(/-/g, "/"));
            break;
        case "number":
            date = new Date(date);
            break;
    }

    return date.format(format);
}


/**
 * parse() 方法可解析一个日期时间字符串,并返回 1970/1/1 午夜距离该日期时间的毫秒数
 * @param {字符串:1970/1/1} d1
 * @param {字符串:1970/1/1} d2
 */
function CompareDate (d1, d2) {
    d1 = d1.replace(/-/g, "/");
    d2 = d2.replace(/-/g, "/");
    if (Date.parse(d1) - Date.parse(d2) == 0) {
        return 0; //相等
    }
    if (Date.parse(d1) - Date.parse(d2) > 0) {
        return 1; //结束日期 大于 开始日期
    }
    if (Date.parse(d1) - Date.parse(d2) < 0) {
        return -1; //结束日期 小于 开始日期
    }
}

/**
 * 返回相距的天数
 * @param {日期字符串|日期时间戳|Date} d1
 * @param {日期字符串|日期时间戳|Date} d2
 */
function GetDateDiffDay(d1, d2) {
    var s1 = new Date(OrgDate(d1));
    var s2 = new Date(OrgDate(d2));

    var time = s2.getTime() - s1.getTime();
    return parseInt(time / (1000 * 60 * 60 * 24));
}

/**
 * 返回 "yyyy-MM-dd"
 * @param {日期字符串|日期时间戳|Date} date
 * @param {数字} day
 */
function addDays(date, day) {
    date = OrgDate(date);

    if (day == undefined || day == null || day == '') {
        day = 0;
    }
    var dy = new Date(date);
    dy.setDate(dy.getDate() + day);

    return dy.format("yyyy-MM-dd");

}



/**
 * 获得两个日期之间所有的日期
 * @param {日期字符串|日期时间戳|Date} start
 * @param {日期字符串|日期时间戳|Date} end
 */
function getBetweenDate(start, end) {
    var collection = [];
    var startTime = new Date(OrgDate(start) );
    var endTime = new Date(OrgDate(end));
    while ((endTime.getTime() - startTime.getTime()) >= 0) {

        startTime.setDate(startTime.getDate() + 1);
        collection.push(addDays(startTime));

    }
    return collection;
}


/**
 *  把形如  /Date("1428242411122")/ 的日期格式转为date
 * @param {'/Date("1428242411122")/''} jsondate
 */
function ConvertJSONDateToJSDateObject(jsondate) {
    var date = new Date(parseInt(jsondate.replace("/Date(", "").replace(")/", ""), 10));
    return date;
}

/**
 * 获得 网络时间 利用ajax;
 */
function getServerDate() {
    return new Date($.ajax({ async: false }).getResponseHeader("Date"));
}

/**
 * javascript 网页中实现一个计算当年还剩多少时间的倒数计时程序
 */
function counter() {

    var date = new Date();

    var year = date.getFullYear();

    var date2 = new Date(year, 11, 30, 23, 59, 59); // 年底

    /*转换成秒*/
    var time = (date2 - date) / 1000;  //一共剩余多少秒

    var day = Math.floor(time / (24 * 60 * 60))


    var hour = Math.floor(time % (24 * 60 * 60) / (60 * 60))

    var minute = Math.floor(time % (24 * 60 * 60) % (60 * 60) / 60);

    var second = Math.floor(time % (24 * 60 * 60) % (60 * 60) % 60);

    var str = year + "年还剩" + day + "天" + hour + "时" + minute + "分" + second + "秒";

    console.log(str);

}

// window.setInterval("counter()", 1000);

/**
 *
 * @param {日期字符串|日期时间戳|Date} time
 */
function ChangeDateFormatDateTime(time) {
    if (time != null) {
        var date = new Date(OrgDate(time));
        return date.format("yyyy-MM-dd HH:mm:ss");
    }
    return "";
}

/**
 *
 * @param {日期字符串|日期时间戳|Date} time
 */
function ChangeDateFormatDate(time) {
    if (time != null) {
        var date = new Date(OrgDate(time));
        return date.format("yyyy-MM-dd");
    }
    return "";
}


// 在一个日期上添加天数
function addDateFormat(date, days) {
        if (typeof (date) == 'string') {//ie浏览器兼容问题
            date = (date + '').replace(/-/g, "/");
        }
        if (days == undefined || days == '') {
            days = 0;
        }
        var date = new Date(date);
        date.setDate(date.getDate() + days);
        var year = date.getFullYear();
        var month = date.getMonth() + 1;
        var day = date.getDate();
        month = month < 10 ? '0' + month : month;
        day = day < 10 ? '0' + day : day;
        return year + '-' + month + '-' + day;
 }

//获取上个月的第一天和最后一天
function getLastDate () {
    var nowdays = new Date();
    var year = nowdays.getFullYear();
    var month = nowdays.getMonth();
    if (month === 0) {
        month = 12;
        year = year - 1;
    }
    if (month < 10) {
        month = '0' + month;
    }
    //上个月的第一天
    var firstDayOfPreMonth = year + '-' + month + '-' + '01';
    var lastDay = new Date(year, month, 0);
    //上个月的最后一天
    var lastDayOfPreMonth = year + '-' + month + '-' + lastDay.getDate();
    return [firstDayOfPreMonth, lastDayOfPreMonth];
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值