xe-utils 计算:年份、月份、周、天、每月天数、月的第几周、年的第几天、年的第几周、日期倒计时、日期至今差距计算、任意日期格式化

使用 xe-utils 可以非常简单的处理任意日期之间的转换: 时区转换、年份、月份、周、天、每月天数、月的第几周、年的第几天、年的第几周、日期倒计时、任意日期格式化

查看 Github

  • js日期转换
    • UTC时间转换本地时间
    • 任意格式字转日期
    • 日期任意格式化
    • 天处理
    • 周处理
    • 月份处理
    • 年份处理
    • 倒计时计算

时区转换

示例

// UTC 时间转本地
XEUtils.toStringDate('2018-01-20T10:20:30.555Z') 
// Sat Jan 20 2018 18:20:30 GMT+0800 (中国标准时间)

// 零时区-伦敦时间
XEUtils.toStringDate('2018-01-20T10:20:30.555+0000') 
// Sat Jan 20 2018 18:20:30 GMT+0800 (中国标准时间)

// 西八区-太平洋时间(美国和加拿大)
XEUtils.toStringDate('2018-01-20T10:20:30.555-0800') 
// Sun Jan 21 2018 02:20:30 GMT+0800 (中国标准时间)

// 西四区-大西洋时间(加拿大)
XEUtils.toStringDate('2018-01-20T10:20:30.555-0400') 
// Sat Jan 20 2018 22:20:30 GMT+0800 (中国标准时间)

// 东七区-曼谷时间
XEUtils.toStringDate('2018-01-20T10:20:30.555+0700') 
// Sat Jan 20 2018 11:20:30 GMT+0800 (中国标准时间)

// 东八区-北京时间
XEUtils.toStringDate('2018-01-20T10:20:30.555+0800') 
// Sat Jan 20 2018 10:20:30 GMT+0800 (中国标准时间)

年份处理函数

示例

// 获取(最近一年、上一年)
XEUtils.getWhatYear(new Date(), -1) 
// Fri Jun 10 2017 20:21:55 GMT+0800 (中国标准时间)

// 获取(最近两年、上两年)
XEUtils.getWhatYear('2018-06-10', -2) 
// Fri Jun 10 2016 00:00:00 GMT+0800 (中国标准时间)

// 获取下一年
XEUtils.getWhatYear(new Date(), 1) 
// Mon Jun 10 2019 20:22:38 GMT+0800 (中国标准时间)

// 获取下两年
XEUtils.getWhatYear('2018-06-10', 2) 
// Mon Jun 10 2019 20:22:46 GMT+0800 (中国标准时间)

// 获取今年的四月份
XEUtils.getWhatYear(new Date(), 0, 3) 
// Tue Apr 10 2018 20:22:54 GMT+0800 (中国标准时间)

// 获取(最近一年、上一年)的三月份
XEUtils.getWhatYear(new Date(), -1, 2) 
// Fri Mar 10 2017 20:23:03 GMT+0800 (中国标准时间)

// 获取下一年的十月份
XEUtils.getWhatYear(new Date(), 1, 9) 
// Thu Oct 10 2019 20:23:09 GMT+0800 (中国标准时间)

// 获取今年的第一天
XEUtils.getWhatYear(new Date(), 0, 'first') 
// Mon Jan 01 2018 00:00:00 GMT+0800 (中国标准时间)

// 获取今年的最后一天
XEUtils.getWhatYear('2018-06-10', 0, 'last') 
// Mon Dec 31 2018 23:59:59 GMT+0800 (中国标准时间)

// 获取(最近一年、上一年)的第一天
XEUtils.getWhatYear(new Date(), -1, 'first') 
// Sun Jan 01 2017 00:00:00 GMT+0800 (中国标准时间)

// 获取(最近一年、上一年)的最后一天
XEUtils.getWhatYear('2018-06-10', -1, 'last') 
// Sun Dec 31 2017 23:59:59 GMT+0800 (中国标准时间)

// 获取下一年的第一天
XEUtils.getWhatYear(new Date(), 1, 'first') 
// Tue Jan 01 2019 00:00:00 GMT+0800 (中国标准时间)

// 获取下一年的最后一天
XEUtils.getWhatYear('2018-06-10', 1, 'last') 
// Tue Dec 31 2019 23:59:59 GMT+0800 (中国标准时间)

月份处理函数

示例

// 获取(最近一个月、上一个月)
XEUtils.getWhatMonth(new Date(), -1) 
// Thu May 10 2018 20:24:09 GMT+0800 (中国标准时间)

// 获取(最近两个月、上两个月)
XEUtils.getWhatMonth('2018-06-10', -2) 
// Tue Apr 10 2018 00:00:00 GMT+0800 (中国标准时间)

// 获取下一个月
XEUtils.getWhatMonth(new Date(), 1) 
// Tue Jul 10 2018 20:24:28 GMT+0800 (中国标准时间)

// 获取下两个月
XEUtils.getWhatMonth('2018-06-10', 2) 
// Fri Aug 10 2018 00:00:00 GMT+0800 (中国标准时间)

// 获取(最近一个月、上一个月)的3号
XEUtils.getWhatMonth(new Date(), -1, 3) 
// Thu May 03 2018 20:24:50 GMT+0800 (中国标准时间)

// 获取下一个月20号
XEUtils.getWhatMonth(new Date(), 1, 20) 
// Fri Jul 20 2018 20:24:57 GMT+0800 (中国标准时间)

// 获取当月的第一天
XEUtils.getWhatMonth(new Date(), 0, 'first') 
// Fri Jun 01 2018 00:00:00 GMT+0800 (中国标准时间)

// 获取当月的最后一天
XEUtils.getWhatMonth('2018-06-10', 0, 'last') 
// Sat Jun 30 2018 23:59:59 GMT+0800 (中国标准时间)

// 获取(最近一个月、上一个月)的第一天
XEUtils.getWhatMonth(new Date(), -1, 'first') 
// Tue May 01 2018 00:00:00 GMT+0800 (中国标准时间)

// 获取(最近一个月、上一个月)的最后一天
XEUtils.getWhatMonth('2018-06-10', -1, 'last') 
// Thu May 31 2018 23:59:59 GMT+0800 (中国标准时间)

// 获取下一个月的第一天
XEUtils.getWhatMonth(new Date(), 1, 'first') 
// Sun Jul 01 2018 00:00:00 GMT+0800 (中国标准时间)

// 获取下一个月的最后一天
XEUtils.getWhatMonth('2018-06-30', 1, 'last') 
// Tue Jul 31 2018 23:59:59 GMT+0800 (中国标准时间)

周处理函数

示例

// 获取(最近一周、上一周)
XEUtils.getWhatWeek(new Date(), -1) 
// Sun Jun 03 2018 20:25:54 GMT+0800 (中国标准时间)

// 获取(最近两周、上两周)
XEUtils.getWhatWeek('2018-01-01', -2) 
// Mon Dec 18 2017 00:00:00 GMT+0800 (中国标准时间)

// 获取下一周
XEUtils.getWhatWeek(new Date(), 1) 
// Sun Jun 17 2018 20:26:09 GMT+0800 (中国标准时间)

// 获取下两周
XEUtils.getWhatWeek('2018-01-01', 2) 
// XEUtils.getWhatWeek('2018-01-01', 2)

// 获取本周的星期日
XEUtils.getWhatWeek('2018-01-01', 0, 0) 
// Sun Jan 07 2018 00:00:00 GMT+0800 (中国标准时间)

// 获取本周的星期一
XEUtils.getWhatWeek('2018-01-01', 0, 1) 
// Mon Jan 01 2018 00:00:00 GMT+0800 (中国标准时间)

// 获取本周的星期五
XEUtils.getWhatWeek('2018-01-01', 0, 5) 
// Fri Jan 05 2018 00:00:00 GMT+0800 (中国标准时间)

// 获取(最近一周、上一周)的星期日
XEUtils.getWhatWeek('2018-01-01', -1, 0) 
// XEUtils.getWhatWeek('2018-01-01', -1, 0)

// 获取(最近一周、上一周)的星期一
XEUtils.getWhatWeek('2018-01-01', -1, 1) 
// XEUtils.getWhatWeek('2018-01-01', -1, 1)

// 获取(最近一周、上一周)的星期五
XEUtils.getWhatWeek('2018-01-01', -1, 5) 
// XEUtils.getWhatWeek('2018-01-01', -1, 5)

// 获取下一周的星期日
XEUtils.getWhatWeek('2018-01-01', 1, 0) 
// Sun Jan 14 2018 00:00:00 GMT+0800 (中国标准时间)

// 获取下一周的星期一
XEUtils.getWhatWeek('2018-01-01', 1, 1) 
// Mon Jan 08 2018 00:00:00 GMT+0800 (中国标准时间

// 获取下一周的星期五
XEUtils.getWhatWeek('2018-01-01', 1, 5) 
// Fri Jan 12 2018 00:00:00 GMT+0800 (中国标准时间)

天处理函数

示例

// 获取今天初始时间
XEUtils.getWhatDay(new Date(), 0, 'first') 
// Sun Jun 10 2018 00:00:00 GMT+0800 (中国标准时间)

// 获取今天最后时间
XEUtils.getWhatDay(new Date(), 0, 'last') 
// Sun Jun 10 2018 23:59:59 GMT+0800 (中国标准时间)

// 获取(最近一天、前一天)
XEUtils.getWhatDay('2018-06-10', -1) 
// Fri Jun 08 2018 00:00:00 GMT+0800 (中国标准时间)

// 获取(最近两天、前两天)
XEUtils.getWhatDay('2018-06-10', -2) 
// Fri Jun 08 2018 00:00:00 GMT+0800 (中国标准时间)

// 获取明天
XEUtils.getWhatDay(new Date(), 1) 
// Mon Jun 11 2018 20:28:00 GMT+0800 (中国标准时间)

// 获取后天
XEUtils.getWhatDay('2018-06-10', 2) 
// Tue Jun 12 2018 00:00:00 GMT+0800 (中国标准时间)

返回某个月份的天数

示例

// 返回当月有多少天
XEUtils.getDayOfMonth('2018-06-10') // 30

// 返回(最近一个月、上一个月)有多少天
XEUtils.getDayOfMonth(new Date(), -1) // 31

// 返回下一个月有多少天
XEUtils.getDayOfMonth(new Date(), 1) // 31

返回某个月的第几周

示例

// 返回当月的第几周
XEUtils.getMonthWeek(new Date()) // 4

XEUtils.getMonthWeek('2018-05-20') // 2

返回某个年份的第几周

示例

// 返回今年的第几周
XEUtils.getYearWeek(new Date()) // 22

XEUtils.getYearWeek('2018-05-20') // 20

返回某个年份的第几天

示例

// 返回今年的第几天
XEUtils.getYearDay(new Date()) // 149

XEUtils.getYearDay('2018-05-20') // 140

返回某个年份的天数

示例

// 返回今年有多少天
XEUtils.getDayOfYear('2020-06-10') // 366

// 返回上一个年有多少天
XEUtils.getDayOfYear(new Date(), -1) // 365

// 返回下一个年有多少天
XEUtils.getDayOfYear(new Date(), 1) // 365

比较两个日期

示例

// 判断是否同年
XEUtils.isDateSame(new Date(), new Date(), 'yyyy')
XEUtils.isDateSame(new Date(), XEUtils.toStringDate('12/30/2018', 'MM/dd/yyyy'), 'yyyy')

// 判断是否同年同月
XEUtils.isDateSame(new Date(), new Date(), 'yyyyMM')
XEUtils.isDateSame(new Date(), XEUtils.toStringDate('12/30/2018', 'MM/dd/yyyy'), 'yyyyMM')

// 判断是否同年同月同日
XEUtils.isDateSame(new Date(), new Date(), 'yyyyMMdd')
XEUtils.isDateSame(new Date(), XEUtils.toStringDate('12/30/2018', 'MM/dd/yyyy'), 'yyyyMMdd')

// 判断是否同年同月同日同时
XEUtils.isDateSame(new Date(), new Date(), 'yyyyMMddHH')
XEUtils.isDateSame(new Date(), XEUtils.toStringDate('12/30/2018', 'MM/dd/yyyy'), 'yyyyMMddHH')

// 判断是否同年同月同日同时同分
XEUtils.isDateSame(new Date(), new Date(), 'yyyyMMddHHmm')
XEUtils.isDateSame(new Date(), XEUtils.toStringDate('12/30/2018', 'MM/dd/yyyy'), 'yyyyMMddHHmm')

// 判断是否同年同月同日同时同分同秒
XEUtils.isDateSame(new Date(), new Date(), 'yyyyMMddHHmmss')
XEUtils.isDateSame(new Date(), XEUtils.toStringDate('12/30/2018', 'MM/dd/yyyy'), 'yyyyMMddHHmmss')

返回两个日期之间差距

示例

// 计算两个日期之间相差多久
var dateDiff = XEUtils.getDateDiff('2018-01-01', '2018-01-02 10:30:00')
// {'yyyy': 0, 'MM': 0, 'dd': 1, 'HH': 10, 'mm': 30, 'ss': 0, 'S': 0}
// 如果结束日期小于开始日期则返回 {done: false}

// 倒计时实现
var srartTime = XEUtils.toStringDate('2018-01-01 00:00:00').getTime()
var endTime = XEUtils.toStringDate('2018-01-02 00:12:00').getTime()
var interval = setInterval(function () {
  srartTime += 1000
  var dateDiff = XEUtils.getDateDiff(srartTime, endTime)
  if (dateDiff.done) {
    console.log(`活动还剩下${dateDiff.dd}${dateDiff.HH}小时${dateDiff.mm}${dateDiff.ss}秒`)
  } else {
    clearInterval(interval)
    console.log('活动已结束')
  }
}, 1000)

输出

控制台输出:
活动还剩下10小时1159秒
活动还剩下10小时1158秒
活动还剩下10小时1157秒
活动还剩下10小时1156...

活动已结束

日期至今差距计算

示例

function toDateDiffText (date) {
    let currDate = 1544407800000 // '2018-12-10 10:10:00'
    let dateDiff = XEUtils.getDateDiff(date, currDate)
    if (dateDiff.done) {
      if (dateDiff.time < 31536000000) {
        if (dateDiff.time < 2592000000) {
          if (dateDiff.time < 86400000) {
            if (dateDiff.time < 360000) {
              if (dateDiff.time < 60000) {
                if (dateDiff.time < 10000) {
                  return `刚刚`
                }
                return `${dateDiff.ss}秒之前`
              }
              return `${dateDiff.mm}分钟之前`
            }
            return `${dateDiff.HH}小时之前`
          }
          return `${dateDiff.dd}天之前`
        }
        return `${dateDiff.MM}个月之前`
      }
      return `${dateDiff.yyyy}年之前`
    }
    return '错误类型'
  }
toDateDiffText('2018-12-10 10:09:59') // 刚刚
toDateDiffText('2018-12-10 10:09:30') // 30秒之前
toDateDiffText('2018-12-10 10:09:30') // 2分钟之前
toDateDiffText('2018-12-10 02:10:00') // 8小时之前
toDateDiffText('2018-12-09 04:09:30') // 1天之前
toDateDiffText('2018-04-09 04:09:30') // 8个月之前
toDateDiffText('2016-06-09 04:09:30') // 2年之前

将日期转为时间戳

XEUtils.timestamp(new Date()) // 1514096716800
XEUtils.timestamp('2018-12-01') // 1543593600000
XEUtils.timestamp('2017/12/20 10:10:30.459', 'yyyy/MM/dd HH:mm:ss.SSS') // 1513735830459

将日期格式化成字符串

支持日期任意转换、格式化成字符串

属性描述备注
yy年份自动截取后两位
yyyy年份
M月份1~12
MM月份自动补001~12
d1~31
dd自动补001~31
h12小时制1~12
hh12小时制自动补001~12
H24小时制0~23
HH24小时制自动补000~23
m分钟0~59
mm分钟自动补000~59
s0~59
ss自动补000~59
S毫秒0~999
SSS毫秒自动补0000~999
a上午,下午am/pm
A上午,下午AM/PM
D年份的第几天1~366
e星期几0~6
E星期几1~7
q季度1~4
W年的第几周1~53
WW年的第几周自动补001~53
Z时区值[±]HH:mm
ZZ时区值[±]HHmm
XEUtils.setup({
  formatDate: 'yyyy-MM-dd HH:mm:ss.SSS',
  formatString: 'yyyy-MM-dd HH:mm:ss',
  formatStringMatchs : {
    E: ['周日', '周一', '周二', '周三', '周四', '周五', '周六'],
    q: [null, '第一季度', '第二季度', '第三季度', '第四季度']
  }
})

XEUtils.toDateString(1513735830000) 
// '2017-01-01 14:05:30'

XEUtils.toDateString(new Date()) 
// '2017-01-01 14:05:30'

XEUtils.toDateString('2017-01-01 10:05:30', 'MM/dd/yyyy')
 // '01/01/2017'
 
XEUtils.toDateString('2017-01-01 10:05:30', 'M/d/yyyy') 
// '1/1/2017'

XEUtils.toDateString(new Date(), 'yyyy-MM-dd') 
// '2017-01-01'

XEUtils.toDateString(new Date(), 'yy-M-d') 
// '17-1-1'

XEUtils.toDateString(new Date(), 'yyyy-MM-dd HH:mm:ss.SSS') 
// '2017-01-01 14:05:30.099'

XEUtils.toDateString(new Date(), 'yyyy-MM-dd hh:mm:ss.SSSZZ') 
// '2017-01-01 02:05:30.099+0800'

XEUtils.toDateString('2017-11-20 10:05:30', 'yyyy-M-d h:m:s.S') 
// '2017-11-20 2:5:30.99'

XEUtils.toDateString(new Date(), 'yyyy-M-d H:m:s.S') 
// '2017-1-1 14:5:30.99'

XEUtils.toDateString(new Date(), 'yyyy-M-d h:m:s.S') 
// '2017-1-1 2:5:30.99'

XEUtils.toDateString(new Date(), 'yyyy年MM月dd日 HH时mm分ss秒S毫秒,E q')
// '2017年01月01日 14时05分30秒99毫秒,周三 第四季度'

XEUtils.toDateString(new Date(), 'yy年M月d日 HH时m分s秒S毫秒,E q')
// '17年1月1日 14时5分30秒99毫秒,周三 第四季度'

XEUtils.toDateString(new Date(), 'yyyy年MM月dd日 hh时mm分ss秒SSS毫秒ZZ E e q 第D天 第W周 aA')
// '2018年05月29日 09时44分46秒647毫秒+0800 周二 1 第一季度 第149天 第22周 amAM'

将字符串转成日期

属性描述
yyyy年份
MM月份
dd
HH小时
mm分钟
ss
SSS毫秒
Z时区
XEUtils.toStringDate('2018-01-20') 
// Sat Jan 20 2018 00:00:00 GMT+0800 (中国标准时间)

XEUtils.toStringDate('2018-01-20', 'yyyy-MM-dd') 
// Sat Jan 20 2018 00:00:00 GMT+0800 (中国标准时间)

XEUtils.toStringDate('2018/01/20', 'yyyy/MM/dd') 
// Sat Jan 20 2018 00:00:00 GMT+0800 (中国标准时间)

XEUtils.toStringDate('01/20/2018', 'MM/dd/yyyy') 
// Sat Jan 20 2018 00:00:00 GMT+0800 (中国标准时间)

XEUtils.toStringDate('20/01/2018', 'dd/MM/yyyy') 
// Sat Jan 20 2018 00:00:00 GMT+0800 (中国标准时间)

XEUtils.toStringDate('2018-01-20 10:20:30.555', 'yyyy-MM-dd HH:mm:ss.SSS') 
// Sat Jan 20 2018 10:20:30 GMT+0800 (中国标准时间)

XEUtils.toStringDate('2018年01月02日10点20分', 'yyyy年MM月dd日HH点mm分') 
// Tue Jan 02 2018 10:20:00 GMT+0800 (中国标准时间)

XEUtils.toStringDate('20180120102030555', 'yyyyMMddHHmmssSSS') 
// Sat Jan 20 2018 10:20:30 GMT+0800 (中国标准时间)

XEUtils.toStringDate(new Date()) 
// Tue May 08 2018 21:25:02 GMT+0800 (中国标准时间)

XEUtils.toStringDate(1525785010388) 
// Tue May 08 2018 21:10:10 GMT+0800 (中国标准时间)
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值