所以需求是获得最近一次进行中或还没开始的活动时间?
实现方法有很多,简单的方法你就记某一天7点的时间戳,客户端请求时你发现活动过期了往后加一天的毫秒数当做新的时间戳,这样你不容易算错。
当然你要是能弄得灵清,不保存时间戳,用7这个数直接现场算都是可以的。
所以需求是获得最近一次进行中或还没开始的活动时间?
实现方法有很多,简单的方法你就记某一天7点的时间戳,客户端请求时你发现活动过期了往后加一天的毫秒数当做新的时间戳,这样你不容易算错。
当然你要是能弄得灵清,不保存时间戳,用7这个数直接现场算都是可以的。
你不需要考虑具体哪个时区,直接用服务器的本地时区就可以了,在服务器上newDate以后把hours设置成7,再getTime获得时间戳,下发给客户端就行了。
hours直接设置成7在他这里有问题,因为策划的7点要求的是UTC时间,但是他服务器可能是其他时区。
关键就在于这个现场算,我发帖就是求这个现场算的方法
这个无所谓,填表的时候跟策划约定好填的时区要跟服务器一致就行了。
这样也能解决问题,就看楼主是否要用这种方式了。
我很好奇的是,为什么需要前端算。。。难道各个时区开始的时间不一样?+7的比+8的晚开1小时?
同时开启啊,这不是前端本地的时间都不一致嘛,获取服务器时间之后要进行换算,就想看怎么算出这个时间戳
我是客户端,服务器上newdata,我操作不了
让服务器传UTC时间戳, 剩下的显示问题就客户端处理
直接让后端改呗,要么发你个字符串时间戳,要么反正统一开启的,接口改成获取现在是否开始活动不就得了
每日任务有很多,与其让服务端多写那么多接口,不如前端写个算法,算出想要的时间戳
算好算啊,关键活动不止一个
写个函数把UTC时间戳转换为本地的时间
转换本地时间就麻烦了,本地的时间和想要的时间不好比对,我现在就想完全摆脱本地时间,纯用时间戳来算
你要显示出来,肯定要使用本地时间的。可以使用时间戳比较,服务器的UTC时间戳转本地时间戳,然后和本地当前时间戳比较
有过类似的需求。
const localNow = new Date("2022/02/21");
const timestamp = localNow.getTime() - localNow.getTimezoneOffset() * 60000 - tz* 60 * 60 * 1000
对于防改时间的问题,我们的做法是,每次登录或者从后台切回来的时候,都立即跟服务器同步时间戳,然后跟本机时间戳计算一个offset,取时间的时候把这个offset加上。这样客户端不管怎么搞,拿到的时间都是跟服务器时间一致的。有点像是自己实现个简单的ntp服务。
我也是这么做的,但是去准确的算7点,九点,有点麻烦,不如直接算出零点时间,加上所需的时间
最终解决方案,登录时拿到服务器时间戳,转换成本地时间加上时间差之后成为服务器准确的时间,然后用服务器时间戳减去小时3600 分60 秒*1 得到的时间戳就是服务器零点时间,虽然很笨,很麻烦,至少解决了。 另外加一句判断,当 当前时间为零点零分时,此时的时间戳就是新的零点时间戳