diff --git a/questions/3.为什么传递时间信息时候推荐使用时间戳.md b/questions/3.为什么传递时间信息时候推荐使用时间戳.md index 0860777..71181bf 100644 --- a/questions/3.为什么传递时间信息时候推荐使用时间戳.md +++ b/questions/3.为什么传递时间信息时候推荐使用时间戳.md @@ -1 +1,40 @@ -# 为什么传递时间信息时候推荐使用时间戳 \ No newline at end of file +# 为什么传递时间信息时候推荐使用时间戳 + +前后端传递时间信息的时候,推荐使用标准时间戳,即自1970-1-1 00:00:00 UTC(世界标准时间)至今所经过的毫秒数。为什么? + +## 错误写法 + +``` + // 前端向后端传递时间 + const time = "2022-04-19 10:56:05" + // 前端获取到后端传递的时间信息进行解析 + const timeStr = "2022-04-19 10:56:05" + const time = BI.getDate(timeStr).getTime() // 期望输出:1650336965000 + console.log(`距离现在经过了${(BI.getTime() - time) / 1000}秒`) +``` + +## 正确写法 + +``` + // 前端向后端传递时间 + const time = BI.getTime() + // 前端获取到后端传递的时间信息进行解析 + const time = 1650336965000 // 直接接收时间戳 + console.log(`距离现在经过了${(BI.getTime() - time) / 1000}秒`) +``` + +## 答案解析 + +在[MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date)中关于Date对象的构造函数描述中,特别强调了**由于浏览器之间的差异与不一致性,强烈不推荐使用Date构造函数来解析日期字符串**,这是为什么呢,如果把上面的错误示例放到IE浏览器中执行 + +``` + const timeStr = "2022-04-19 10:56:05" + const time = BI.getDate(timeStr).getTime() // 会收到报错:Invalid DateDate +``` + +如果一定要解析时间字符串,FineUI中提供了`BI.parseDateTime`方法,仅适用于处理一些用户手动输入的时间格式字符串场景 + +``` + const timeStr = "2022-04-19 10:56:05" + const time = BI.getDate(BI.parseDateTime(timeStr,"%Y-%X-%d %H:%M:%S")).getTime() // 期望输出:1650336965000 +``` \ No newline at end of file