JavaScript Date 对象

发布于 2023-05-10 15:25:53 字数 5060 浏览 61 评论 0

关于 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, '/'))

参考

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

灼痛

暂无简介

文章
评论
27 人气
更多

推荐作者

櫻之舞

文章 0 评论 0

弥枳

文章 0 评论 0

m2429

文章 0 评论 0

野却迷人

文章 0 评论 0

我怀念的。

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文