Date 对象

简介: Date 对象

前言


关于 Date 对象,有几个方法总是记不住或者记混淆的,所以写篇文章整理一下。


关于 GTM(格林威治时间)和 UTC(世界标准时间)的区别,可以看文章末尾引用的文章


正文


Date


在 ECMAScript 中,Date 类型使用自世界标准时间(UTC)1970-1-1 00:00:00 开始经过的毫秒数来保存日期。


// 获取起始时间
const date = new Date(0)
// Thu Jan 01 1970 08:00:00 GMT+0800 (中国标准时间)


创建 Date 两种方式:


// 字符串类型
const date = Date()
console.log(typeof date) // string
// 对象类型(常用)
const date = new Date()
console.log(typeof date) // object


Date Get 方法


下面以 2020 年 12 月 03 日为例:


  • getTime()
    返回 1970 年 1 月 1 日零时至今的毫秒数。
  • getFullYear()
    返回 4 位数的年份(如 2020)。
  • getMonth()
    返回月份,值为 0~11 分别表示 1 月到 12 月。所以一般获取月份都要加一
  • getDate()
    返回一个月的某天,值为 1~31 分别表示 1日到 31 日。
  • getDay()
    返回一周的某天,值为 0~6 分别表示周日、周一到周六。
  • getHours()
    返回小时数,值为 0 ~ 23
  • getMinutes()
    返回分钟数,值为 0 ~ 59
  • getSeconds()
    返回秒数,值为 0 ~ 59
  • getMilliseconds()
    返回毫秒数,值为 0 ~ 999


getYear() 方法在 Web 标准中已被删除,尽管某些浏览器仍然支持它,但建议不要用了!因为它在不同浏览器的表现不一样。像 Chrome、Safari、FireFox 返回的是 当前年份 - 1900 的值。而在 IE 浏览器上,当当前年份大于等于 2000 时,返回值是当前 4 位数年份。  MDN Date.getYear()


Date Set 方法


  • setTime()
    以毫秒设置 Date 对象(参数:毫秒数
  • setDate()
    根据本地时间设置 Date 对象中月的某一天(合理参数:1 ~ 31,分别表示 1 ~ 31 日)


如果参数超出合理范围,会相对应的更新 Date 对象。

  • 参数为 0 时,则设置为上个月的最后一天
  • 参数为 负数 时,则设置为上个月最后一天往前数这个负数绝对值天数后的日期。例如:-1 会设置为上月最后一天的前一天
  • 参数为 超过当前月最大的天数 时,则超出天数参数值 - 当前月天数)设置为下个月对应日期。例如:当前 Date 为 4 月,当参数为 32 时,则日期被设置为 5 月 2 日。

下列 Set 方法同理。


  • setMonth()
    根据本地时间设置 Date 对象中月份(参数:0 ~ 11,分别表示 1 ~ 12 月份)
  • setFullYear()
    根据本地时间设置 Date 对象中的年份(参数:4 位数字年份


同样 setYear() 已从 Web 标准中删除,不建议使用。


  • setMilliseconds()
    根据本地时间设置 Date 对象中的毫秒数(参数:0 ~ 999
    超出合理范围,日期对象的时间会相应地更更新。例如 1005,秒数加 1,毫秒数为 5。
  • setSeconds()
    根据本地时间设置 Date 对象中的秒数(参数:0 ~ 59
    超出合理范围,日期对象的时间会相应地更更新。例如 100,分钟数加 1,秒数为 40。
  • setMinutes()
    根据本地时间设置 Date 对象中的秒数(参数:0 ~ 59
    超出合理范围,日期对象的时间会相应地更更新。例如 60,小时数加 1,秒数为 0。
  • setHours()
    根据本地时间设置 Date 对象中的小时数(参数:0 ~ 23
    超出合理范围,日期对象的时间会相应地更更新。例如 24,天数加 1,小时数为 0。


UTC 时间


上述所讲的 Get 和 Set 方法是针对本地时区时间去获取、设置时间的。而 Date 同样提供了获取、设置 UTC 时间,方法如:getUTCMonth()setUTCMonth() 等等。实践过程中,比较少涉及 UTC 时间,所以不展开赘述。可以偷偷点这里去了解。


Date 其他方法


  • Date.now()
    返回自 1970-1-1 00:00:00(UTC)到当前时间的毫秒数。
  • Date.prototype.toString()Date.prototype.toTimeString()Date.prototype.toDateString()
    返回值是以美式英语和人类易读的形式返回日期对象的格式化字符串。该字符串由日期部分(年月日)和时间部分(时分秒及时区)组成。


const date = new Date()
date.toString() // "Thu Dec 03 2020 18:19:17 GMT+0800 (中国标准时间)"
date.toDateString() // "Thu Dec 03 2020"
date.toTimeString() // "18:19:17 GMT+0800 (中国标准时间)"


  • Date.parse()Date.prototype.getTime()Date.prototype.valueOf()
    它们都返回 1970-1-1 00:00:00(UTC)到指定日期的毫秒数。但是它们还是有区别的。


前者精确到,而后两者是精确到毫秒


const date = new Date('5/24/2020')
date.setMilliseconds(45) // 设置毫秒数
console.log(date.getTime()) // 1590249600045
console.log(date.valueOf()) // 1590249600045
console.log(Date.parse(date)) // 1590249600000


兼容性


类似 new Date('xxxx/xx/xx xx:xx:xx') 形式的时间对象在 IOS 和 Andriod 系统上都可以被正确的识别,而类似 new Date('xxxx-xx-xx xx:xx:xx') 形式的时间对象在 iOS 系统上无法被正确的识别,需要做一层转化。


const date = new Date('xxxx-xx-xx xx:xx:xx'.replace(/-/g, '/'))


参考



目录
相关文章
|
2月前
|
Shell
date $(date --date="2 days" +"%m%d")$(date +"%H%M")然后再输入date时间没变啊
date $(date --date="2 days" +"%m%d")$(date +"%H%M")然后再输入date时间没变啊
|
3月前
|
SQL Oracle 关系型数据库
深入解析 NOW() 与 CURRENT_DATE() 的区别
【8月更文挑战第31天】
141 0
|
6月前
|
C++
【c++】日期类的实现-Class Date
【c++】日期类的实现-Class Date
【c++】日期类的实现-Class Date
|
6月前
|
JavaScript 前端开发
date对象是什么?有什么用
date对象是什么?有什么用
94 0
|
6月前
|
JavaScript 前端开发 开发者
date对象用法?
date对象用法?
51 1
|
12月前
|
安全
Date转换
Date转换
78 0
Date转换
|
JavaScript 前端开发
【JavaScript】Date对象(创建时间对象、常用Date方法总结)
【JavaScript】Date对象(创建时间对象、常用Date方法总结)
155 0
Date 对象创建
Date 对象创建
94 0
|
JSON Unix 数据库
25、Date 对象
Date对象可以作为普通函数直接调用,返回一个代表当前时间的字符串。
128 0