秒杀倒计时,jsp+js 获取服务器的时间

本文介绍了一个使用Java实现服务器时间和客户端时间同步的方法,并通过实例展示了如何计算两个时间点之间的差值来实现倒计时功能。该方案利用JSP页面与JavaScript交互,获取服务器当前时间,并通过定时器不断更新剩余时间。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
//引入工具包
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";


Calendar cal = Calendar.getInstance();
int hour = cal.get(cal.HOUR_OF_DAY);
int minute = cal.get(cal.MINUTE);
int month = cal.get(cal.MONTH);
int date = cal.get(cal.DATE);
int year = cal.get(cal.YEAR);
int second = cal.get(cal.SECOND);

%>

//获取服务器端时间

<script type="text/javascript">
var NowHour = "";//Today.getHours();
var NowMinute = "";//Today.getMinutes();
var NowMonth = "";//Today.getMonth();
var NowDate = "";//Today.getDate();
var NowYear = "";//Today.getYear();
var NowSecond = "";//Today.getSeconds();

//获取服务端时间
function getTime(){
NowHour = "<%=hour%>";//Today.getHours();
NowMinute = "<%=minute%>";//Today.getMinutes();
NowMonth = "<%=month%>";//Today.getMonth();
//NowMonth = (parseInt(NowMonth)+1);
NowDate = "<%=date%>";//Today.getDate();
NowYear = "<%=year%>";//Today.getYear();
NowSecond = "<%=second%>";//Today.getSeconds();
}

var yzm ;//验证码
getTime();
startclock();
var timerID = null;
var timerRunning = false;

var year = "";
var month= "";
var day= "";
var hour= "";
var minute= "";
var seconds= "";



function showtime() {
var time=$("#hiddenTime").val();//获取数据库中结束时间或开始时间,然后开始计算离开始或结束还差多少时间

splitTime(time);//以上用于截取时间,分成年,月,日,时,分,秒

//=========================================
//以下用于用于计算时间差
//Today = new Date();

//if (NowYear < 2000)
// NowYear = 1900 + NowYear;
//Today = null;
Hourleft = hour - NowHour;
Minuteleft = minute - NowMinute;
Secondleft = seconds - NowSecond;
Yearleft = year - NowYear;
Monthleft = month - NowMonth - 1;
Dateleft = day - NowDate;
NowSecond = (parseInt(NowSecond)+1);
//Secondleft = (parseInt(Secondleft)-1);
//秒钟
if (NowSecond > 60) {
NowSecond =  NowSecond - 60;
NowMinute = (parseInt(NowMinute)+1);
}
if (Secondleft < 0) {
Secondleft = 60 + Secondleft;
Minuteleft = (parseInt(Minuteleft)-1);
}
//分钟
if (NowMinute >60) {
NowMinute =  NowMinute - 60;
NowHour = (parseInt(NowHour)+1);
}
if (Minuteleft < 0) {
Minuteleft = 60 + Minuteleft;
Hourleft = (parseInt(Hourleft)-1);
}
//小时
if (NowHour >24) {
NowHour =  NowHour - 24;
NowDate = (parseInt(NowDate)+1);
}
if (Hourleft < 0) {
Hourleft = 24 + Hourleft;
Dateleft = (parseInt(Dateleft)-1);
}
//天
if (NowDate > 31) {
NowDate = NowDate - 31;
NowMonth = (parseInt(NowMonth)+1);
}
if (Dateleft < 0) {
Dateleft = 31 + Dateleft;
Monthleft = (parseInt(Monthleft)-1);
}
//月
if (NowMonth >12 ) {
NowMonth =  NowMonth - 12;
NowYear = (parseInt(NowYear)+1);
}
if (Monthleft < 0) {
Monthleft = 12 + Monthleft;
Yearleft = (parseInt(Yearleft)-1);
}

Hourleft = Dateleft * 24 + Hourleft ;
if(Hourleft<10){
Hourleft = "0"+Hourleft;
}
if(Minuteleft<10){
Minuteleft = "0"+Minuteleft;
}
if(Secondleft<10){
Secondleft = "0"+Secondleft;
}
//Temp = Hourleft + ':'  + Minuteleft + ':' + Secondleft ;
var status = "${msActivity.status}";
if(status == 1||status == 2){
    if(Hourleft<100){
     Hourleft = '0'+Hourleft;
   
                     $("#timeup").html(Hourleft);
                    
                     }    
$("#timeup").html(Hourleft);
$("#timeup1").html(Minuteleft);
$("#timeup2").html(Secondleft);
if(Hourleft==0&&Minuteleft==0&&Secondleft==0){
  window.location.reload();
}

}else{
$("#timeup").html("000");
$("#timeup1").html("00");
$("#timeup2").html("00");
}

setTimeout("showtime()", 1000);
//timerRunning = true;
}

//var timerID = null;
//var timerRunning = false;
//function stopclock() {
// if (timerRunning)
// clearTimeout(timerID);
// timerRunning = false;
//}
function startclock() {
//stopclock();
showtime(); //调用计算时间差方法,并显示
}
//以上用于计算时间差
//=============================================
function splitTime(time){
year=time.substr(0,4);
var index1=time.indexOf("-");
var index2=time.lastIndexOf("-");
var cha=parseInt(index2)-(parseInt(index1)+1);
month=time.substr((parseInt(index1)+1),cha);
var kg=time.indexOf(" ");
cha=parseInt(kg)-parseInt(index2);
day=time.substr(parseInt(index2)+1,cha);
var mh=time.indexOf(":");
cha=parseInt(mh)-(parseInt(kg)+1);
hour=time.substr(parseInt(kg)+1,cha);
var mh2=time.lastIndexOf(":");
cha=parseInt(mh2)-(parseInt(mh)+1);
minute=time.substr(parseInt(mh)+1,cha);
var mh2=time.lastIndexOf(":");
seconds=time.substr(parseInt(mh2)+1,2);

package com.shxy.seckill.web; import com.shxy.seckill.dto.Exposer; import com.shxy.seckill.dto.SeckillExecution; import com.shxy.seckill.dto.SeckillResult; import com.shxy.seckill.entity.Seckill; import com.shxy.seckill.enums.SeckillStateEnum; import com.shxy.seckill.exception.RepeatKillException; import com.shxy.seckill.exception.SeckillCloseException; import com.shxy.seckill.service.ISeckillService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.*; import java.util.Date; import java.util.List; import java.util.Objects; @Controller @RequestMapping("/seckill") public class SeckillController { private final Logger logger = LoggerFactory.getLogger(this.getClass()); @Autowired private ISeckillService seckillService; @GetMapping("/list") public String List(Model model) { //获取秒杀商品的详情信息 List<Seckill> list = seckillService.getSeckilllist(); model.addAttribute("list", list); //返回list.jsp return "list"; } @GetMapping("/{seckillId}/detail") public String detail(@PathVariable Long seckillId, Model model) { /*通过秒杀Id*/ if (Objects.isNull(seckillId)) { return "redirect:/seckill/list"; /*重定向转化到商品列表*/ } Seckill seckillById = seckillService.getSeckillById((seckillId));/*进行秒杀Id的一个查询*/ if (Objects.isNull(seckillId)) { return "redirect:/seckill/list"; } model.addAttribute("seckill", seckillById); //返回detail.jsp return "detail"; } @GetMapping (value = "/{seckillId}/exposer", produces = "application/jason;charset=UTF-8") @ResponseBody public SeckillResult<Exposer> exposer(@PathVariable Long seckillId) { SeckillResult<Exposer> result; try { Exposer exposer = seckillService.exportSeckillUrl(seckillId); result = new SeckillResult<Exposer>(true, exposer); } catch (Exception e) { logger.error(e.getMessage(), e); result = new SeckillResult<Exposer>(false, e.getMessage()); } return result; } @PostMapping(value = "/{seckillId}/{md5}/execution", produces = "application/jason;charset=UTF-8") @ResponseBody public SeckillResult<SeckillExecution> execute(@PathVariable Long seckillId, @PathVariable String md5, @CookieValue("killPhone") Long userPhone) { if (Objects.isNull(userPhone)) { return new SeckillResult<SeckillExecution>(false, "用户手机号缺失,请填写手机号"); } SeckillResult<SeckillExecution> result; try { SeckillExecution seckillExecution = seckillService.executeSeckill(seckillId, userPhone, md5); return new SeckillResult<SeckillExecution>(true, seckillExecution); } catch (RepeatKillException e) { SeckillExecution seckillExecution = new SeckillExecution(seckillId, SeckillStateEnum.REPEAT_KILL, null); return new SeckillResult<SeckillExecution>(false, seckillExecution); } catch (SeckillCloseException e) { SeckillExecution seckillExecution = new SeckillExecution(seckillId, SeckillStateEnum.END, null); return new SeckillResult<SeckillExecution>(false, seckillExecution); } catch (Exception e) { logger.error(e.getMessage(), e); SeckillExecution seckillExecution = new SeckillExecution(seckillId, SeckillStateEnum.INNER_ERROR, null); return new SeckillResult<SeckillExecution>(false, seckillExecution); } } @GetMapping("/time/now") @ResponseBody public SeckillResult<Long> time() { Date now = new Date(); return new SeckillResult<Long>(true, now.getTime()); } } 所提供代码片段和这段代码为什么连不上
最新发布
06-14
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值