名为 Date.parse() 的魔法 | 青训营笔记

101 阅读2分钟

这是我参与「第四届青训营」笔记创作活动的第 14 天

Date.parse 的 iOS 兼容

提问:

以下这段代码是否可以正常运行?

Date.parse('2022-8-21 24:00:00')

答案是:

MacBook PC 端结果为 1661097600000,等于 Date.parse('2022-8-22 00:00:00')

iPhone 移动端结果为 NaN

那么 iPhone 移动端运行 Date.parse('2022-8-22 00:00:00') 的结果呢?不好意思,也是 NaN,只有

Date.parse('2022/08/22 00:00:00')

可以正常运行,打印出 1661097600000

如果非要使用 - 间隔数字的话,可以写成这种形式

Date.parse("2022-08-22T00:00:00")

但需注意日期月份必须用 0 补全两位(比如 Date.parse("2022-8-22T00:00:00") 不论在 PC 还是 mobile 都是 NaN,也就是运算结果不是个数字)

一句话总结:为避免兼容问题,日期格式最好使用 '2022/08/22 00:00:00' 方式。

常用 Date 方法

基础 api说明
let date = new Date('2022/08/22 00:00:00')返回一个 Date 对象,可以使用一些内置方法如 date.getHours()
Date.now()返回当前时间戳(毫秒),相当于 let now = new Date(); now.valueOf()
Date.parse('2022/08/22 00:00:00')'2022/08/22 00:00:00' 的时间戳(毫秒)
date.getFullYear()
date.getMonth() + 1
date.getDate()
date.getHours()
date.getMinutes()
date.getSeconds()

这里要注意一下,月日时分秒都有可能是单数,所以一些场景下需要手动补 0,比如 ${date.getDate() > 10 ? '': '0'}${date.getDate()}

日期 +1 天

let now = new Date('2022/08/31 00:00:00')
now.setDate(now.getDate() + 1)
let tomorrow = new Date(now)
// tomorrow: Thu Sep 01 2022 00:00:00 GMT+0800 (中国标准时间)

日期格式化工具

moment.js

功能强大,但依赖较大,如果只是需要常用日期方法推荐 day.js。

day.js

只有 2KB,有一些常用 API,但可以根据需要下载扩展。

二者使用上差不多,可以根据需要选择。

参考:Javascript date parsing on Iphone