前言:
项目中遇到时间处理问题,又不想引入挺大的包(moment),只能自己封一下函数,下面列举本人常用的函数
获取某年某月的天数
有一种思路:判断是否是闰年 -> 判断月份 -> 得出天数
const getDaysOfMonth = (year, month) => {
const isLeapYear = !year % 4 && year % 100 || !year % 400
if ([4, 6, 9, 11].includes(month)) {
return 30
}
if ([1, 3, 5, 7, 8, 10, 12].includes(month)) {
return 31
}
if (month === 2) {
return isLeapYear ? 29 : 28
}
}
第二种思路(推荐):Date 对象 API -> 得到天数
const getetDaysOfMonth = (year, month) => new Date(year, month, 0).getDate()
格式化时间戳
格式化为 2019-10-6 12:3:10 的形式:
const formatTime = (dateTime = Date.now()) => {
const nums = new Date(dateTime).toLocaleString().match(/\d+/g)
return nums.slice(0, 3).join('-') + ' ' + nums.slice(3).join(':')
}
格式化为 2019-10-06 12:03:10 的形式,加个是否大于 10 的判断即可:
const formatTimeAddZero = (dateTime = Date.now()) => {
const nums = new Date(dateTime).toLocaleString()
.match(/\d+/g)
.map(item => item < 10 ? `0${item}` : item)
return nums.slice(0, 3).join('-') + ' ' + nums.slice(3).join(':')
}
// 若参数为 2019:10:6 12:3:10 形式,直接用正则替换即可
const formatTimeAddZero = timeStr => timeStr.replace(/\b(\d)\b/g, '0$1')
格式化为 2019年10月06日 12时03分10秒 的形式:
// 在 map 时加上单位即可
const formatTimeToCN = (dateTime = Date.now()) => {
const cn = ['年', '月', '日', '时', '分', '秒']
const nums = new Date(dateTime).toLocaleString()
.match(/\d+/g)
.map((item, idx) => item < 10 ? `0${item}${cn[idx]}` : `${item}${cn[idx]}`)
return nums.slice(0, 3).join('') + ' ' + nums.slice(3).join('')
}
获取前一个星期
const getLastWeek = (year, month, day) => {
const LEN = 7, lastWeek = []
for (let i = 0; i < LEN; ++i) {
lastWeek.push(
new Date(new Date(year, month - 1, day).getTime() - i * 24 * 3600 * 1000).toLocaleDateString()
)
}
return lastWeek
}
由上同理可得:
获取某年某月某日的后三天:
const getNextThreeDays = (year, month, day) => {
const LEN = 3, nextThreeDays = []
for (let i = 0; i < LEN; ++i) {
nextThreeDays.push(
new Date(new Date(year, month - 1, day).getTime() + i * 24 * 3600 * 1000).toLocaleDateString()
)
}
return nextThreeDays
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。