1. 几种时间表示方式
- GMT
- 规定格林尼治标准时间的正午是在格林尼治上空最高点时间。由于地球每天的自转是不规则的,被原子钟报时的协调世界时(UTC)所取代
- UTC
- 以原子时秒长为基础,接近GMT时间,但更精确
- CST
- 北京时间,比世界协调时快八小时(即UTC+8)
2. 常见用法
let d = new Date()
d.getTime() //返回实例对象距离1970年1月1日00:00:00对应的毫秒数
// +new Date()
// let now = Date.now()
d.getDate() //返回实例对象对应每个月的几号(从1开始)
d.getDay() //返回星期,星期日为0,星期一为1,以此类推
d.getFullYear() //返回四位的年份
d.getMonth() //返回月份(0表示1月,11表示12月)
d.getHours() //返回小时(0~23)
d.getMilliseconds() //返回毫秒(0-999)
d.getMinutes() //返回分钟(0-59)
d.getSeconds() //返回秒(0-59)
let d2 = new Date()
d2.setDate(1)
d2.setFullYear(2020)
let date = new Date('2020-01-01 00:00:00')
3. 案例
- 获取一段代码的运行时间 ```javascript function getRuntime(fn) { // 获取起始时间 let start = Date.now() // 调用函数 fn() // 获取结束时间 let end = Date.now() // 获取运行时间 let runTime = end - start return runTime }
// 求fib(40)的运行时间 let runTime = getRuntime(() => {fib(40)}) console.log(runTime)
function fib(n) { if(n === 1 || n === 2) { return n } return fib(n - 1) + fib(n - 2) }
- **去年的今天是星期几**
```javascript
// 获取现在时间毫秒数
let now = Date.now()
// 获取一年前的时间对象
let lastYear = now - 365 * 24 * 60 * 1000
let date = new Date(lastYear)
// 获取星期几
let time = date.getDay()
let arr = ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六']
let str = `去年的今天是${arr[time]}`
console.log(str)
距离…还剩x天x时x分x秒 ```javascript function getLeftTime(time) { // 获取目标时间的毫秒数 let targetTime = new Date(time) // 获取现在的毫秒数 let nowTime = Date.now() // 相差的时间毫秒数 let leftTime = Math.abs(targetTime - nowTime)
let days = Math.floor(leftTime / (24 60 60 1000)) let hours = Math.floor(leftTime % (24 60 60 1000) / (60 60 1000)) let minutes = Math.floor(leftTime % (60 60 1000) / (60 1000)) let seconds = Math.floor(leftTime % (60 1000) / 1000) return {days, hours, minutes, seconds} // es6写法 }
let date = getLeftTime(2022-01-01 00:00:00
)
let str = 倒计时${date.days}天${date.hours}小时${date.minutes}分钟${date.seconds}秒
console.log(str)
- **格式化旧日期**
- 刚刚、3分钟前、2小时前、10天前
```javascript
function formatTime(dateTime) {
let nowTime = Date.now()
let targetTime = new Date(dateTime)
let betweenTime = parseInt((nowTime - targetTime) / 1000)
// 小于一分钟
if(betweenTime < 60) {
return '刚刚'
} else if(betweenTime < 3600) {
return `${parseInt(betweenTime / 60)}分钟前`
} else if(betweenTime < 3600 * 24) {
return `${parseInt(betweenTime / 3600)}小时前`
} else {
return `${parseInt(betweenTime / (3600 * 24))}天前`
}
}
let res = formatTime('2019-12-11 17:33:39')
console.log(res)