资讯专栏INFORMATION COLUMN

Date扩展-格式化 日期操作(持续更新)

stormjun / 913人阅读

摘要:中有很多非常好用的日期操作库,如但是平常的项目用的的方法有限,未免有些冗余,特提取出比较常用的一些方法有些人可能会觉得的方式在方法的扩展中更实用些,确实如此。

github中有很多非常好用的日期操作库,如moment.js;但是平常的项目用的的方法有限,未免有些冗余,特提取出比较常用的一些方法

有些人可能会觉得Date.prototype.的方式在方法的扩展中更实用些,确实如此。本中都是多带带拉出来的方法,使用者可自行组装。

日期格式化
 /** 日期格式化
 * @param {Number String Date} 
 * @param {String} "YYYY-MM-DD HH:mm:ss EEE" 年(Y)、月(M)、日(D)、12小时(h)、24小时(H)、分(m)、秒(s)、毫秒(S)、周(E)、季度(q)
 * @return {String}
 * @example XDate.format(new Date(), "YYYY-MM-DD") ==> 2017-08-23
 */
XDate.format = function(date, fmt) {
    fmt = fmt || "YYYY-MM-DD HH:mm:ss";
    if (typeof date === "string") {
        date = new Date(date.replace(/-/g, "/"))
    }
    if (typeof date === "number") {
        date = new Date(date)
    }
    var o = {
        "M+": date.getMonth() + 1,
        "D+": date.getDate(),
        "h+": date.getHours() % 12 === 0 ? 12 : date.getHours() % 12,
        "H+": date.getHours(),
        "m+": date.getMinutes(),
        "s+": date.getSeconds(),
        "q+": Math.floor((date.getMonth() + 3) / 3),
        "S": date.getMilliseconds()
    }
    var week = {
        "0": "u65e5",
        "1": "u4e00",
        "2": "u4e8c",
        "3": "u4e09",
        "4": "u56db",
        "5": "u4e94",
        "6": "u516d"
    }
    if (/(Y+)/.test(fmt)) {
        fmt = fmt.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length))
    }
    if (/(E+)/.test(fmt)) {
        fmt = fmt.replace(RegExp.$1, ((RegExp.$1.length > 1) ? (RegExp.$1.length > 2 ? "u661fu671f" : "u5468") : "") + week[date.getDay() + ""])
    }
    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;
}
闰年判断

闰年:能被4整除但不能被100整出

/** 判断是否为闰年
 * @param {Number} yr
 * @return {Boolean}
 */

XDate.isLeapyear = function(yr) {
    return (yr % 4 === 0 && yr % 100 !== 0) || yr % 400 === 0
}
获取某一年份的指定月份的天数

闰年的二月是个特殊值(依赖与isLeapyear函数)

/** 获取某一年份的某一月份的天数
 * @param {Number} year
 * @param {Number} month
 */
XDate.getMonthDays = function(year, month) {
    return [31, null, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month-1] || (XDate.isLeapyear.call(null, year) ? 29 : 28);
}
获取某个时间前/后的时间
/** 获取某个时间相加/减后的时间
* @param {Date} date
* @param {Number} num 参数为正时时间前移,为负时间后移
* @param {String} type y / m / d / h / m / s / ms
 */
XDate.modify = function (date, num, type) {
    date = this.converDate(date);  
    if (!num) {
        return date;
    }
    switch (type) {
        case "y":
            date.setFullYear(+date.getFullYear() + num);
            break;
        case "m":
            date.setMonth(+date.getMonth() + num);
            break;
        case "d":
            date.setDate(+date.getDate() + num);
            break;
        case "h":
            date.setHours(+date.getHours() + num);
            break;
        case "m":
            date.setMinutes(+date.getMinutes() + num);
            break;
        case "s":
            date.setSeconds(+date.getSeconds() + num);
            break;
        case "ms":
            date.setMilliseconds(+date.getMilliseconds() + num);
            break;
    }
    return date;
}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/84856.html

相关文章

  • 前端知识点总结——JS高级(持续更新中)

    摘要:前端知识点总结高级持续更新中字符串什么是连续存储多个字符的字符数组相同下标遍历选取不同类型不同不通用所有字符串都无权修改原字符串,总是返回新字符串大小写转换统一转大写统一转小写何时不区分大小写时,都需要先转为一致的大小写,再比较。 前端知识点总结——JS高级(持续更新中) 1.字符串 什么是: 连续存储多个字符的字符数组 相同: 1. 下标 2. .length 3. 遍历 4....

    wangzy2019 评论0 收藏0
  • js操作时间(持续更新

    摘要:时间格式化原型上添加获取年份。获取两个日期之间的日期计算天前 1、时间格式化(Date原型上添加) Date.prototype.format = function() { var s = ; var mouth = (this.getMonth() + 1)>=10?(this.getMonth() + 1):(0+(this.getMonth() + 1)); ...

    DobbyKim 评论0 收藏0
  • Java™ 教程(Date-Time)

    Date-Time Java SE 8发行版中引入的Date-Time包java.time提供了全面的日期和时间模型,是在JSR 310:Date and Time API下开发的,尽管java.time基于国际标准化组织(ISO)日历系统,但也支持常用的全球日历。 此课程介绍了使用基于ISO的类来表示日期和时间以及操作日期和时间值的基本原理。 概述 时间似乎是一个简单的主题,即便是便宜的手表也能...

    AlphaGooo 评论0 收藏0
  • 前端那些小众而又精美的网站及工具

    摘要:写此文的目的是为了总结在开发中能增加我们开发速度及能给我们带来方便的工具与网站及一些小众框架只限于简介不负责教程如有相应的教程希望大家自荐或推荐我在这里感激不尽让我们发现美并记录它第一次写文章请多多包涵如有我没有写到的但又是一些好用的工具及 写此文的目的是为了总结在开发中能增加我们开发速度及能给我们带来方便的工具与网站及一些小众框架只限于简介不负责教程如有相应的教程希望大家自荐或推荐我...

    Edison 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<