写在前面
因为js只能操作客户端的东西。在客户端时刻显示并更新服务器的时间应该是不可能的,因为会由于网络延迟的因素使得时间不精确。
这个是和截止时间进行比较的。以服务器时间为基准,和截止日期进行比较判断。如果在截止日期之前,则可以进行提交保存的操作,否则提示已经超时。
采取的方式是在用户提交时在服务器端的后台程序中进行判断,而不是借助前端的JS。
另外如果是考试倒计时的话,可以采用先从服务器端获取时间,然后开始计数。页面刷新或者退出的时候对累计的时间也进行提交,并存储在服务器中。服务器端下一次加载操作页面的时候,同时传递上一次累计的时间,页面对时间开始继续计数,直到到达考试时间。
其余网上给的参考:
打个比方,可以使用ajax每秒钟获取服务器的时间,然后再显示出来,但是可能这个用户的网络延迟比较厉害,他请求的这个时间过了两三秒才返回给客户端,那这样更新时间就不精确了。
也可以这样,第一次从服务器那里获取时间,然后再客户端用js,每秒累加数,就是以获取服务器的那个时间为起掉,用客户端代码每秒累加这个时间
最后补充下:
PHP时间获取函数是从服务器端的时间获取;
JS时间获取函数是从客户端的时间获取;
如果两者时间没有统一,那么简单的凭借客户端的时间来判断是否超期是不现实的做法;
还有你们可能要的代码
html:
<input type="button" class="btn btn-default" role="button" value="保存"
onclick ="homeworkButton('save')" /> 
<input type="button" class="btn btn-default" role="button" value="提交"
onclick ="homeworkButton('submit')" />
//javaScript
//用的ajax请求
function homeworkButton(buttonType){
$.ajax({
url: "/model/actionName",
type : "POST",
data : { "aaa":aaaa,//你的想传递的参数
},
dataType : "text",
async : true,
success : function(mydata) {//服务器端返回的结构mydata
if(mydata == false){
//提交保存时已经和服务器的时间相比,超出截止日期,超期了
}else{
//提交保存成功后续操作
}
},
error : function() { //提交失败了
alert("calc failed");
}
});
}
//PHP:
//我用的是Yii框架
//这段是上面ajsx请求的url对应的model下的Controller里面actionName函数的部分内容
[Yii 1.1版本控制器视图与ajax的使用方式](http://blog.csdn.net/xujing19920814/article/details/70228796)
if($dealModel->DeadlineJudge($deadline)){//未超期
//如果用户点击“保存”,若是新开始的数据库新增一条记录,并设置状态为保存,如果是“提交”修改的数据库update记录
$response = $model->functionName($params);
}else{
$response["datebase"] = false;
}
echo $response["datebase"];