最近在写一个酒店客房预订系统,通过时间戳来判断该日期被预订了没,然后前端是这样的
前端是自动生成最近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点的时间戳了