资讯专栏INFORMATION COLUMN

好用的时间插件

omgdog / 1001人阅读

摘要:因为长期的项目积累自己写了一些计算时间的插件相比较我觉得比它好用补全时间月往後推幾個月格式化日期把时间戳只取日期部分精确到天把时间戳只取时间部分精确到秒把时间戳转化为字符串形式精确到秒取月份第一天精确到天

因为长期的项目积累,自己写了一些计算时间的插件,相比较momoent,我觉得比它好用

const ONE_DAY = 86400000
const ensureLength = function (num) {
  // 补全时间YYY-MM-dd HH:MM:ss
  let nlen = num.toString().length
  num = nlen < 2 ? "0" + num : num
  return num
}
const isUndefined = function (s) {
  return s === undefined || s === null || s === ""
}
const _DateUtils = {
  parse (dateStr) {
    if (dateStr instanceof Date) {
      return dateStr
    } else if (/^d+$/.test(dateStr)) {
      return new Date(parseInt(dateStr, 10))
    } else if (dateStr) {
      let dateString = dateStr.replace(/[-:]/g, ",").replace(/s+/g, ",")
      let dateArr = dateString.split(",")
      return new Date(dateArr[0], dateArr[1] - 1, dateArr[2], dateArr[3] || 0, dateArr[4] || 0, dateArr[5] || 0)
    } else if (!dateStr) {
      return dateStr
    }
  },
  toDateString (date, tpl) {
    let locals
    if (isUndefined(date)) {
      date = new Date()
    }
    if (isUndefined(tpl)) {
      tpl = "yyyy-MM-dd"
    }
    date = this.parse(date)
    locals = {
      yyyy: date.getFullYear(),
      YYYY: date.getFullYear(),
      MM: ensureLength(date.getMonth() + 1),
      dd: ensureLength(date.getDate()),
      HH: ensureLength(date.getHours()),
      mm: ensureLength(date.getMinutes()),
      ss: ensureLength(date.getSeconds())

    }
    return tpl.replace(/YYYY|yyyy|MM|dd|HH|mm|ss/g, function ($1) {
      return locals[$1]
    })
  },
  toTimeString (date, tpl) {
    let locals
    if (isUndefined(date)) {
      date = new Date()
    }
    if (isUndefined(tpl)) {
      tpl = "HH:mm:ss"
    }
    locals = {
      HH: ensureLength(date.getHours()),
      mm: ensureLength(date.getMinutes()),
      ss: ensureLength(date.getSeconds())
    }
    return tpl.replace(/HH|mm|ss/g, function ($1) {
      return locals[$1]
    })
  },
  toDateTimeString (date) {
    date = date || new Date()
    date = this.parse(date)
    return this.toDateString(date) + " " + this.toTimeString(date)
  },
  getFirstDate (date) {
    date = date || new Date()
    date = this.parse(date)
    let fitsrDate = new Date(date.getFullYear(), date.getMonth(), 1)
    return this.toDateString(fitsrDate)
  },
  getLastDate (date) {
    date = this.parse(date)
    let nextMonthFirstDate = (new Date(date.getFullYear(), date.getMonth() + 1, 1)).getTime()
    let lastDate = new Date(nextMonthFirstDate - ONE_DAY)
    return this.toDateString(lastDate)
  },
  toMonthString (date) {
    let month
    if (isUndefined(date)) {
      date = new Date()
    }
    date = this.parse(date)
    month = ensureLength(date.getMonth() + 1)
    return (date.getFullYear()) + "-" + month
  },
  getPreMonth (date) {
    let month, year
    if (isUndefined(date)) {
      date = new Date()
    }
    date = this.parse(date)
    year = date.getFullYear()
    month = ensureLength(date.getMonth())
    year = month === "00" ? year - 1 : year
    month = month === "00" ? "12" : month
    return year + "-" + month
  },
  getPreMonthDay (today) {
    if (isUndefined(today)) {
      today = new Date()
    }
    return this.toDateString(today.setMonth(today.getMonth() - 1))
  },
  ago (cnt) {
    let day = new Date().getDate()
    return new Date().setDate(day - cnt)
  },
  getCurrentWeek () {
    let now = new Date()
    let currentDay = now.getDay()
    let start = this.ago(currentDay - 1)
    let end = now
    return [start, end]
  },
  getRecentMonths (cnt) {
    /*
      params{
        cnt : "月",往後推幾個月
      }
    */
    if (isUndefined(cnt)) {
      cnt = 0
    }
    cnt = parseInt(cnt)
    let now = new Date()
    let currentMonth = now.getMonth()
    let year = now.getFullYear()
    let start
    let agoMonth = currentMonth - cnt > 0 ? currentMonth - cnt : currentMonth - cnt + 12
    let agoYear = currentMonth - cnt > 0 ? year : year - 1
    start = new Date(agoYear, agoMonth, 1)
    let end = new Date()
    return [start, end]
  },
  getCurrentQ () {
    let now = new Date()
    let currentMonth = now.getMonth()
    let start
    if (currentMonth < 3) {
      start = now.setMonth(0)
    } else if (currentMonth > 3 && currentMonth < 6) {
      start = now.setMonth(3)
    } else if (currentMonth > 2 && currentMonth < 6) {
      start = now.setMonth(6)
    } else if (currentMonth > 8 && currentMonth < 11) {
      start = now.setMonth(9)
    }
    start = new Date(start).setDate(1)
    let end = new Date()
    return [start, end]
  }
}
/*
params:{
  parse(格式化日期),
  toDateString(把时间戳只取日期部分,精确到天),
  toTimeString(把时间戳只取时间部分,精确到秒),
  toDateTimeString(把时间戳转化为字符串形式,精确到秒),
  getFirstDate(取月份第一天,精确到天),
  getLastDate(取月份最后一天,精确到天),
  toMonthString(月份转化为字符串),
  getPreMonth(取上月份,精确到月),
  getPreMonthDay(取上一月,精确到天),
  ago(前第n天,精确到天),
  getRecentMonths(最近幾個月,從1號開始)
  getCurrentQ(最近一個季度,從1號開始)
}
*/
export default _DateUtils

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

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

相关文章

  • 推荐几款chrome上比较好用书签收藏夹插件

    摘要:我相信这是很多人共同的感受,所以今天推荐的款书签收藏夹插件印象笔记剪藏插件下载地址印象笔记推出的一款剪藏插件,可以一键收藏各类网页图文,并永久保存进。 今天有个人问我chrome浏览器器上有没有可以稍后阅读的插件啊?她其实想问的就是书签收藏夹插件,因为我们在互联网上一不小心就会看到很多感兴趣的内容,但是时间有限暂时无法阅读,以后保存下来有时间的时候再看。我相信这是很多人共同的感受,所以...

    superPershing 评论0 收藏0
  • AJAX-Cache:一款好用Ajax缓存插件

    摘要:是一款缓存插件,可以为方法扩展缓存功能。缓存清理插件本身会自动清理过期缓存对于不想继续使用缓存的接口可以为方法传入清理当前接口的缓存并返回最新数据也可以调用清理所有插件产生的缓存。 原文链接 AJAX-Cache是什么 Ajax是前端开发必不可少的数据获取手段,在频繁的异步请求业务中,我们往往需要利用缓存提升界面响应速度,减少网络资源占用。AJAX-Cache是一款jQuery缓存插件...

    didikee 评论0 收藏0
  • sublime text3 好用插件

    摘要:推荐插件安装打开,按或者菜单打开命令窗口。配置中找到修改,可以额外添加注释的内容,我习惯使用某某使用方法回车即可代码提示,不解释效率快了很多插件代码高亮代码补全暂时先介绍这些,再有好玩的插件之后再来分享 sublime text3 推荐插件 Package Controller安装 1、打开sublime text 3,按ctrl+~或者菜单View > Show Console打开命...

    you_De 评论0 收藏0
  • 推荐几款好用Chrome插件

    摘要:今天就来跟大家分享一下工作中用到的几款插件。是一款功能强大的网页调试与发送网页请求的插件。俗称油猴子,是一款功能非常强大的插件,他包含方便的脚本管理脚本概览设置多样性脚本自动更新安全兼容性同步编辑器语法检查快速开发卸载等功能。 ‘工欲善其事,必先利其器’。优秀的开发者不仅体现在其在技术方面的精通,还体现在其对各种开发工具的充分了解与使用,这会让其开发效率事半功倍。作为一个前端开发者,平...

    fox_soyoung 评论0 收藏0

发表评论

0条评论

omgdog

|高级讲师

TA的文章

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