JavaScript 玩转时间对象 Date

JavaScript

0x01 内容介绍

许多朋友在开发的过程中总会遇到各种有关时间的问题,如获取某特定时间的时间戳、把时间对象格式化等等,本篇文章将会帮助大家总结并解决一些常用的时间问题,您可以把它当成一篇字典文章,方便今后查阅、使用

0x02 时间戳

const date = new Date(); //获取时间对象
date.getTime(); //获取当前的时间戳,从1970年1月1日零点到现在的毫秒数
Math.round(date.getTime()/1000); //获取当前的时间戳,根据毫秒数四舍五入的结果
Math.floor(date.getTime()/1000); //获取当前的时间戳,根据毫秒数下舍入
Date.parse(date); // 获取当前时间戳,毫秒是0

0x03 获取日期和时间

let date = new Date();
let year = date.getFullYear();//获取完整的年份(4位,1970-????)
let month = date.getMonth() + 1;//获取当前月份(0-11,0代表1月)
let day = date.getDate();//获取当前日(1-31)
let weekDay = date.getDay();//获取当前星期X(0-6,0代表星期天)
let hour = date.getHours();//获取当前小时数(0-23)
let minute = date.getMinutes();//获取当前分钟数(0-59)
let second = date.getSeconds();//获取当前秒数(0-59)
let milliseconds = date.getMilliseconds();//获取当前毫秒数(0-999)

let setWeekDay = '';
switch (weekDay) {
  case 0:
    setWeekDay = '星期天';
    break;
  case 1:
    setWeekDay = '星期一';
    break;
  case 2:
    setWeekDay = '星期二';
    break;
  case 3:
    setWeekDay = '星期三';
    break;
  case 4:
    setWeekDay = '星期四';
    break;
  case 5:
    setWeekDay = '星期五';
    break;
  case 6:
    setWeekDay = '星期六';
    break;
}

console.log(`今天是${year}年${month}月${day}日 ${setWeekDay} ${hour}时${minute}分${second}秒 ${milliseconds}毫秒`);

// 下面三个语句是在 Node 环境里运行的结果,浏览器里运行的结果与这个不同
date.toLocaleDateString();     //获取日期,YYYY-MM-DD
date.toLocaleTimeString();     //获取时间,HH:mm:ss
date.toLocaleString();        //获取日期与时间,YYYY-MM-DD HH:mm:ss

0x04 实战

要求:写一个通用函数或者类,可以获取当前时间或者用户自定义时间的时间戳和时间格式,也可以实现两者的相互转换

class Datetime {
  constructor(date) {
    if(date) {
      if (date instanceof Date) {
        this.date = date;
      } else {
        throw new Error('构造函数参数错误,应传Date()对象')
      }
    } else {
      this.date = new Date();
    }
  }

  // 转化成时间戳
  transTimeStamp() {
    return this.date.getTime();
  }

  // 转化为时间格式 YYYY-MM-DD HH:mm:ss
  transDateTime() {
    const {date, dateTimeFormat} = this;
    let year = date.getFullYear();//获取完整的年份(4位,1970-????)
    let month = dateTimeFormat(date.getMonth() + 1);//获取当前月份(0-11,0代表1月)
    let day = dateTimeFormat(date.getDate());//获取当前日(1-31)
    let hour = dateTimeFormat(date.getHours());//获取当前小时数(0-23)
    let minute = dateTimeFormat(date.getMinutes());//获取当前分钟数(0-59)
    let second = dateTimeFormat(date.getSeconds());//获取当前秒数(0-59)
    return `${year}-${month}-${day} ${hour}:${minute}:${second}`
  }

  // 格式化
  dateTimeFormat(v) {
    return v < 10 ? `0${v}` : `${v}`
  }

  setDateTime(date) {
    if(date) {
      if (date instanceof Date) {
        this.date = date;
      } else {
        throw new Error('setDateTime函数参数错误,应传Date()对象')
      }
    } else {
      this.date = new Date();
    }
  }
}

// 实现
const date = new Datetime();
console.log(date.transDateTime());
console.log(date.transTimeStamp());
date.setDateTime(new Date('2017-06-05 12:22:23'));
console.log(date.transDateTime());
console.log(date.transTimeStamp());

简书作者 小菜荔枝 转载请联系作者获得授权

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • https://wiki.openstreetmap.org/wiki/O5m 目录 1. Motivation1...
    微雨旧时歌丶阅读 5,486评论 0 2
  • 大概翻译了一下,非常的粗糙,慢慢修正。请高手自动飘过~ 因为做图像压缩时会损失相机写入的如光圈、快门等信息,所以自...
    流年易逝_李阅读 10,715评论 0 1
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,043评论 25 709
  • binlog想必大家都不陌生,在主从复制或者某些情况下的数据恢复会用到。由于binlog是二进制数据,要查看一般都...
    __七把刀__阅读 52,048评论 8 62
  • 每当看到准妈妈即将卸货,总会想起我的母乳之路。母乳,每个宝宝都应该享受的天然珍贵的赐予。但近些年在产妇里...
    南方的小碎花阅读 3,853评论 0 1