js获取某个时间戳所在日期的0点的时间戳

今天遇到一个奇怪的问题。(开头总结:下面写的方法1有问题,要用再下面的方法2)

我现在有一个毫秒表示的当前时间时间戳nowTime。

我又有一个 今天0点到 时间点A的毫秒数 ATime。(北京时间)


现在我需要把ATime转换为时间戳形式,也就是在只有时间没有日期的基础上,加上今天的日期。

方法1:

        var oneDayMs = 24 * 60 * 60 * 1000;
        var realATime = Math.floor(nowTime / oneDayMs) * oneDayMs + ATime;//把nowTime的日期加到startTime上

(先用一天的毫秒数来算出nowTime所在日期0点的时间戳,加上ATime,就得到ATime的时间戳,是不是看起来没什么问题,非常对)

但是算出来的时间戳比正经时间多了8个小时,很神秘,推测时区之类的问题。

检查过程:

检查 算式中的参数nowTime和ATime都很正确,比如nowTime=1509606043000,ATime=54009,拿nowTime/1000去http://tools.sharejs.com/unixtime.html转换,拿ATime去算ATime/3600,都能得到很正确的结果。

但是放进这个算式得到的结果,放到那个网站转换,的确多了8个小时。

错误原因:

时间戳是世界时,ATime是北京时间,北京时间换算回世界时要减8个小时。这里没有减就一顿操作,就多了8个小时!


方法2:

        let nowTimeDate = new Date(nowTime);
        nowTimeDate.setHours(0, 0, 0, 0);//设为当天0点0分0秒0毫秒。
        var realATime = nowTimeDate.getTime() + ATime;//把nowTime的日期加到startTime上
其中用到了setHours,是基于当地时间的,所以会设到北京时间的0点,就能,算对!

用这个Date对象也要注意,构造方法传进去的是世界时时间戳,但是通过方法获得的东西基本都是本地时间。


====下面贴一下抄来的setHours()说明================================

setHours()函数用于基于当地时间设置当前Date对象中的小时值。也就是"年月日 时分秒"中"时"的数值。setHours()函数还可同时设置分钟值和秒值以及毫秒值。

该函数属于Date对象,所有主流浏览器均支持该函数

语法

date.setHours( hours[, minutes[, seconds[, milliseconds ]]] )



你可能感兴趣的:(js获取某个时间戳所在日期的0点的时间戳)