toFrankie / blog

种一棵树,最好的时间是十年前。其次,是现在。
22 stars 1 forks source link

Date 对象 #226

Open toFrankie opened 1 year ago

toFrankie commented 1 year ago

关于 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 日为例:

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

Date Set 方法

UTC 时间

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

Date 其他方法

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 (中国标准时间)"
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, '/'))

参考