1. 几种时间表示方式

  • GMT
    • 规定格林尼治标准时间的正午是在格林尼治上空最高点时间。由于地球每天的自转是不规则的,被原子钟报时的协调世界时(UTC)所取代
  • UTC
    • 以原子时秒长为基础,接近GMT时间,但更精确
  • CST
    • 北京时间,比世界协调时快八小时(即UTC+8)

2. 常见用法

  1. let d = new Date()
  2. d.getTime() //返回实例对象距离1970年1月1日00:00:00对应的毫秒数
  3. // +new Date()
  4. // let now = Date.now()
  5. d.getDate() //返回实例对象对应每个月的几号(从1开始)
  6. d.getDay() //返回星期,星期日为0,星期一为1,以此类推
  7. d.getFullYear() //返回四位的年份
  8. d.getMonth() //返回月份(0表示1月,11表示12月)
  9. d.getHours() //返回小时(0~23)
  10. d.getMilliseconds() //返回毫秒(0-999)
  11. d.getMinutes() //返回分钟(0-59)
  12. d.getSeconds() //返回秒(0-59)
  13. let d2 = new Date()
  14. d2.setDate(1)
  15. d2.setFullYear(2020)
  16. 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) }

  1. - **去年的今天是星期几**
  2. ```javascript
  3. // 获取现在时间毫秒数
  4. let now = Date.now()
  5. // 获取一年前的时间对象
  6. let lastYear = now - 365 * 24 * 60 * 1000
  7. let date = new Date(lastYear)
  8. // 获取星期几
  9. let time = date.getDay()
  10. let arr = ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六']
  11. let str = `去年的今天是${arr[time]}`
  12. 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)