封装一个日期库,实现增删改查
JS自带库
增
const now = new Date() //获取本地当前时间
const d1 = new Date(2001,1,3,14,15,16,999) //2001年2月
const d2 = new Date(1600_000_000) //时间戳可以为负数吗
const d3 = new Date(
now = Date.now() //获取本地当前时间
查部分
const year = d.getFullYear()
const month = d.getMonth() + 1 //montn 0 表示 1月
const day = d.getDate()
const weekday = d.getDay()
const hours = d.getHours()
const minutes = d.getMinutes()
const seconds = d.getSeconds()
const ms = d.getMilliseconds()
查整体
let iso8601格式的字符串 = d.toISOString()
let 时间戳 = d.valueOf()
let 时间戳 = d - 0
let 时间戳 = +d
改部分
d.setFullYear(n)
d.setMonth(n-1)
d.setDate(n)
//d.setDay(n) 没有这个方法,改第几天是上面那个方法
d.setHours(n)
d.setMinutes(n)
d.setSeconds(n)
d.setMilliseconds(n)
自己封装的time库
function time(...params) {
if (!(this instanceof time)) {
return new time(...params)
}
if (arguments.length > 1) {
params[1] -= 1
}
this.date = new Date(...params)
}
time.prototype = {
constructor: time,
parts(attrs) {
if (attrs === undefined) {
return {
year: this.date.getFullYear(),
month: this.date.getMonth() + 1,
day: this.date.getDate(),
weekday: this.date.getDay(),
hour: this.date.getHours(),
minute: this.date.getMinutes(),
second: this.date.getSeconds(),
ms: this.date.getMilliseconds()
}
} else {
const { year, month, day, hour, minute, second, ms } = attrs
year !== undefined && this.date.setFullYear(year)
month !== undefined && this.date.setMonth(month - 1)
day !== undefined && this.date.setDate(day)
hour !== undefined && this.date.setHours(hour)
minute !== undefined && this.date.setMinutes(minute)
second !== undefined && this.date.setSeconds(second)
ms !== undefined && this.date.setMilliseconds(ms)
}
},
add(n, unit) {
const valid = 'year month day hour minute second ms'.split(' ').includes(unit)
if (!valid) {
throw new Error('你传了一个什么单位,我不认识: ' + unit)
}
const table = {
ms: 1,
second: 1000,
minute: 1000 * 60,
hour: 1000 * 60 * 60,
day: 1000 * 60 * 60 * 24,
}
if (unit === 'year') {
this.date.setFullYear(this.date.getFullYear() + n)
} else if (unit === 'month') {
this.date.setMonth(this.date.getMonth() + n)
} else {
this.date = new Date(this.date - 0 + table[unit] * n)
}
},
isLeapYear() {
const year = this.date.getFullYear()
if (year % 4 === 0) {
if (year % 100 === 0) {
if (year % 400 === 0) {
return true
} else {
return false
}
} else {
return true
}
} else {
return false
}
},
lastDayOfMonth() {
const { year, month, hour, minute, second, ms } = this.parts()
return new time(year, month + 1, 0, hour, minute, second, ms)
},
format(pattern) {
const { year, month, day, hour, minute, second } = this.parts()
return pattern.replace(/yyyy/g, year)
.replace(/MM/g, padLeftZero(month))
.replace(/dd/g, padLeftZero(day))
.replace(/HH/g, padLeftZero(hour))
.replace(/mm/g, padLeftZero(minute))
.replace(/ss/g, padLeftZero(second))
}
}
function padLeftZero(n) {
return n > 10 ? '' + n : '0' + n
}