使用 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)
输出
控制台输出:
活动还剩下1天0小时11分59秒
活动还剩下1天0小时11分58秒
活动还剩下1天0小时11分57秒
活动还剩下1天0小时11分56秒
...
活动已结束
日期至今差距计算
示例
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 | 月份 | 自动补0 | 01~12 |
d | 日 | 1~31 | |
dd | 日 | 自动补0 | 01~31 |
h | 12小时制 | 1~12 | |
hh | 12小时制 | 自动补0 | 01~12 |
H | 24小时制 | 0~23 | |
HH | 24小时制 | 自动补0 | 00~23 |
m | 分钟 | 0~59 | |
mm | 分钟 | 自动补0 | 00~59 |
s | 秒 | 0~59 | |
ss | 秒 | 自动补0 | 00~59 |
S | 毫秒 | 0~999 | |
SSS | 毫秒 | 自动补0 | 000~999 |
a | 上午,下午 | am/pm | |
A | 上午,下午 | AM/PM | |
D | 年份的第几天 | 1~366 | |
e | 星期几 | 0~6 | |
E | 星期几 | 1~7 | |
q | 季度 | 1~4 | |
W | 年的第几周 | 1~53 | |
WW | 年的第几周 | 自动补0 | 01~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 (中国标准时间)