网页同步服务器时间长,javascript小技巧:同步服务器时间、同步倒计时

***步,当用户***次浏览页面时,服务器首先获取当前时间并显示在页面上(比如:显示在ID为timebox span中)

第二步,设置一个每隔一秒就计算新的时间(新时间以服务器时间为初始值,然后每隔一秒累加一秒并生成新的时间)

第三步,显示第二步计算的时间

是不是很简单,总结成一句话就是:以服务器时间为初始值,然后在页面上自动每隔一秒就累加一秒生成新时间,这样就能保证与服务器时间同步了,误差基本在几秒内,应该没关系了,好了看一下实现的代码吧:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

11:21:55 //***次将服务器时间显示在这里

$(function () {

var oTime = $("#timebox");

var ts = oTime.text().split(":", 3);

var tnums = [parseInt(ts[0]), parseInt(ts[1]), parseInt(ts[2])];

setInterval(function () {

tnums = getNextTimeNumber(tnums[0], tnums[1], tnums[2]);

showNewTime(tnums[0], tnums[1], tnums[2]);

}, 1000);

function showNewTime(h, m, s) {

var timeStr = ("0" + h.toString()).substr(-2) + ":"

+ ("0" + m.toString()).substr(-2) + ":"

+ ("0" + s.toString()).substr(-2);

oTime.text(timeStr);

}

function getNextTimeNumber(h, m, s) {

if (++s == 60) {

s = 0;

}

if (s == 0) {

if (++m == 60) {

m = 0;

}

}

if (m == 0) {

if (++h == 24) {

h = 0;

}

}

return [h, m, s];

}

});

代码很简单在此就不多作说明(我上面只显示时分秒,大家也可以加上日期,加上日期可在当h==0时,直接从服务器获取一个日期或完整的时间,作为一次时间的校对),不懂的可以在下面评论,我会及时回复的,然后按照这种思路来实现一下同步倒计时,首先说明一下,什么是同步倒计时,就是类似秒杀一样,设置一个结束时间,然后计算当前时间与结束时间之间间隔,而且必需保证在不同的电脑、浏览器上显示的倒计时时间均相同,实现代码如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

同步倒计时

1天00时00分12秒

$(function () {

var tid = setInterval(function () {

var oTimebox = $("#timebox");

var syTime = oTimebox.text();

var totalSec = getTotalSecond(syTime) - 1;

if (totalSec >= 0) {

oTimebox.text(getNewSyTime(totalSec));

} else {

clearInterval(tid);

}

}, 1000);

//根据剩余时间字符串计算出总秒数

function getTotalSecond(timestr) {

var reg = /\d+/g;

var timenums = new Array();

while ((r = reg.exec(timestr)) != null) {

timenums.push(parseInt(r));

}

var second = 0, i = 0;

if (timenums.length == 4) {

second += timenums[0] * 24 * 3600;

i = 1;

}

second += timenums[i] * 3600 + timenums[++i] * 60 + timenums[++i];

return second;

}

//根据剩余秒数生成时间格式

function getNewSyTime(sec) {

var s = sec % 60;

sec = (sec - s) / 60; //min

var m = sec % 60;

sec = (sec - m) / 60; //hour

var h = sec % 24;

var d = (sec - h) / 24;//day

var syTimeStr = "";

if (d > 0) {

syTimeStr += d.toString() + "天";

}

syTimeStr += ("0" + h.toString()).substr(-2) + "时"

+ ("0" + m.toString()).substr(-2) + "分"

+ ("0" + s.toString()).substr(-2) + "秒";

return syTimeStr;

}

});

为了保证倒计时的精确度,我采用了先将倒计时时间间隔统一计算成秒,然后减1秒再重新生成时间格式,当然也可以按照上面时间同步的例子,直接进行时间减少,方法很多,我这个不一定是***的,欢迎大家交流,谢谢!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值