这是我参与「第四届青训营」笔记创作活动的第 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,但可以根据需要下载扩展。
二者使用上差不多,可以根据需要选择。