文化传播集团网站建设,无锡定制网站建设,php建站,wordpress swf 上传起因
最近在写一个页面#xff0c;需要用到时间控制。然后我通过new Date()传入日期字符串创建了一个对象#xff0c;并与当前时间做时间戳比较#xff0c;结果12点刚过#xff0c;就出问题了。举个栗子#xff1a;
// 假设当前时间是2019年12月22日0点20分
new Date(20…
起因
最近在写一个页面需要用到时间控制。然后我通过new Date()传入日期字符串创建了一个对象并与当前时间做时间戳比较结果12点刚过就出问题了。举个栗子
// 假设当前时间是2019年12月22日0点20分
new Date(2019-12-22).getTime() new Date().getTime()
// 上面的结果是什么正常来说应该是true吧但不好意思啊返回了false
百思不得其解当时因为情况紧急查出了上面的创建时间返回的内容并不是0点而是8点 所以就强行在时间字符串上拼接了时间new Date(2019-12-22 00:00:00).getTime(), 强行解决了这个问题。
然后又碰到了在IOS上不识别中横线分割的时间字符串问题讲中横线转成了反斜杠。
当时临时解决问题后的字符串大概长这样
new Date(2019/12/22 00:00:00).getTime() new Date().getTime()
临时解决问题。现在闲来无事可以看看这个问题究竟是什么鬼
尝试
传入不同的字符串格式看看结果我只尝试了最常使用的两种格式 惊讶的发现-分割的字符串被默认解析到了8点而/分割的字符串默认解析到了0点。这么说来我之前有点多次一举了直接讲-替换成/就可以了啊。
探究
那么为什么默认是8点呢有没有觉得8这个数字很值得关注我们所在的时区是东八区如果以GMT标准0点来算的话在那个时间点这里就是8点啊。
那我就可以这样理解了创建时间时它默认时间确实是0点但是是以GMT为基准的所以将其转换成本地时间就是8点。而/分割的字符串在创建时则是以本地时区为基准。
那么为什么js会对不同分割的时间字符串进行不同处理呢貌似是因为-分隔且具有前导0的日期字符串会被解析成ISO格式的字符串以GMT时区为基准不过我也没看懂。
解决
最终既然-分割的字符串会出问题那我就讲所有的-都换成/就好了正好也可以借此解决IOS的兼容问题。动手解决 /*** 将时间字符串转换成date对象* param dateStr* 时间字符串*/
function getDate(dateStr){/* 若日期是使用-分割的全部转换成/因为只有日期时js会将-分割的字符串基准时区设置为GMT与当前时区相差8小时 */dateStr dateStr.replace(/-/g, /);return new Date(dateStr);
}