移动端如何写一个相对靠谱的倒数秒杀时间或者说开售时间

最近搬家简书http://www.jianshu.com/u/82ce13e5e1fc
开始接到这个需求的时间感觉,诶和倒数计差不多嘛应该很简单,但是细细想来.如果要求的比较高的话还是比较复杂的

第一种方案:获取剩余开售时间

剩余.png
这种方式存在明显的缺陷,就是当App进程被杀死后或者计时器停止之后再次进去界面显示的时间肯定是错误的,不建议使用.

第二种方案:获取开售时间的时间戳

Snip20170104_18.png
通过获取开售时间的时间戳对比本地时间,算出剩余时间相对上面的方便要准确,但是还有一个问题就是当用户修改本地时间之后,如果没有特别要求在最后购买的时候服务器在做一次限制还是可以的,双11的时候特地看了下淘宝的H5页面也是获取的本地时间,但是他在内部的秒杀也是用了其他方法待我下面慢慢道来

第三种方案:开售时间的时间戳与网络校准时间对比

Snip20170103_13.png
与第二种方法相比多加了一步时间校准的过程,网络获取的当前时间与当前本地时间对比,算出的时间差
时间差=本地时间-网络时间
剩余时间=开售时间-(本地时间-时间差)
这种方案还算是比较精确了,但是在断网之后这方法就会失效,不过断网了又能干嘛呢,但是为了精益求精原则分析了大量的材料与App之后,还有一种终极方法,请看下面的第四种方案.

第四种方案:网络校准时间 + 本地时间 + 开机时长同时校准

Snip20170103_15.png
这种方式是对上面的几种方案的强化

Snip20170103_16.png
不知道你们这个图是否能看懂
比如说现在开机时间是1000秒当前网络时间是1点整,第二次启动应用的时候没有网络,开机时间是1600秒,那么当前时间就是1点+1600-1000 = 1点10分这样就算是在断网情况下用户修改了时间还是可以得到相对准确定时间,当然重启之后这个方法就失效了,所以需要判断记录的时间是否比当前时间大.
iOS和Android的获取开机时长的方法都是有的,大家自己去Google百度一下吧

总结

具体实现还是要看具体情况,利用234方案穿插使用应该是能满足大部分的需求的~
猜猜最好我们用了哪种方案~~
~
~~~~简单粗暴第二种~~想太多最好用的还是最简单的哈哈哈~~~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值