起因
两个选择时间范围的组件,需要判断开始时间和结束时间不能超过三天,以每天的0点为分界。
为了时间的精确性,我用组件的传值生成Date对象,再getTime()获取时间戳。用时间戳转换为天数进行比较。
但是,同样的一天,早上8点前和8点后,算出来的天数居然是不一样的。
var startStamp1 = new Date("2023-06-29 05:05:05").getTime();
var startStamp2 = new Date("2023-06-29 10:10:10").getTime();
startStamp1=Math.floor(startStamp1/(1000*60*60*24));//19536
startStamp2=Math.floor(startStamp2/(1000*60*60*24));//19537
解决方法
new Date()生成的是本地时间,getTime()获取的是格林威治标准时间戳,这两个时间是有时差的。
用getTimezoneOffset()可以获取这个时间差,单位是分钟。
var startStamp = new Date("2023-06-29 05:05:05").getTime();
var offset = new Date().getTimezoneOffset();//时间偏移量(分钟)
startStamp = startStamp/(1000*60) - offset;//分钟,消除偏移后
startStamp=Math.floor(startStamp/(60*24));//19537