欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

时间戳怪事. 已经想到解决办法

程序员文章站 2022-05-02 15:13:25
...

最近在写一个酒店客房预订系统,通过时间戳来判断该日期被预订了没,然后前端是这样的时间戳怪事. 已经想到解决办法
前端是自动生成最近6个月的日历表,格式如上图,我通过获取date-date里的时间转换成时间戳,
但是制作的时候 7 8 9 月的预订判断一直很正常 但是涉及到10月以后的 总是出错
我试过了用获取6个月的全部日期的时间戳(已经被预订的日期会变成灰色datedate属性会消失变成disable,所以完整的日历时间戳数组里是不会有的)
这是获取时间戳的函数
时间戳怪事. 已经想到解决办法
我就是通过这个方式来对比
原来的思路是
1.拿到6个月 全部的日子转换成 时间戳 存成一个数组(已经被预订的日期会变成灰色不会取到)
2拿到预订开始跟结束的时间 算出间隔每一天的时间戳 存成一个数组
比如预订3天
设一个计数count
3.遍历 4个月时间戳 里面在遍历 预订时间
如果预订的每一天都在 4个月的数组里 找到了自己 就把count+1
如果count==预订的天数也就是意味着 预订的范围区间没被其他人 预订掉
结果一旦涉及10月份以后的 都会出错..count 有时候都是0

遍历出全部的时间戳 数量也对…

后来换了一种思路

1拿到全部日子的时间戳datearr
2.拿到预订入住跟离开的区间每一天的时间戳
3.

var $flag=false;
         for(var i=0;i<$dataarray.length;i++){
              if($alldate.indexOf($dataarray[i])<=-1){
                  $flag=true;
              }
          }

结果也是到了10月份之后出了错;

实在无解

最后只好5天5天的测试到什么位置出错的 最终终于找到了罪魁祸首 2017-10-10
不知道是什么原因都是同样格式转过来的 2017-10-10之前的时间戳成时间戳在转回来的时间是2017-10-09 00:00:00 ,而一到2017-10-10之后全部变成了 2017-10-10 08:00:00
这样的情况下 在怎么对比 肯定都是找不到的…原因是找到了 但是为什么会这样?有没有高玩解释下?同样格式转换成时间戳 为什么2017-10-10成了 0:00:00 跟8:00:00的分界线??

还有一个关键点
我发现问题的另外一个关键点 就是 当月份变成2位数的时候 日期是单位数 时间戳的时间为0点 单日期变成了2位数的数的时候 时间戳变成了 8点。。10 11 12月都这样

10月1号-10月9号 转换出来的是0点
10月10号-10月31号 转换出来的是8点
11月1号-11月9号 转换出来的是0点
11月10号-11月30号 转换出来的是8点
12月1号-12月9号 转换出来的是0点
12月10号-12月31号 转换出来的是8点

什么原理???注意 是统一转换的时候的情况下

找到解决办法了.
原因是字符串单位数跟双位数的问题. 只要把比如2017-1-1 单位数上全部补上0 得到的时间戳就是 集体8点的 然后在减去28800 就可以得到统一的 0点的时间戳了