菜鸟再问,客户端显示时间差不对,已经48小时没有人给出详解了(火急)
首先,感谢csdn上的各位热心人这一段时间帮我解决了许多对我来说是困难的难题。
现在我的网页发布了,但是在实际环境调试时发生了问题。再请各位能人帮着看一下。
-----------------------------------------------------------------
问题:
win2003+sqlserver2000+asp.net+c#(2003)环境,是一个在线考试系统,剩余时间显示问题。
我在asp.net程序段用js写的显示剩余时间程序段,本段程序在服务器机器里时间运行就正确,在客户端运行时间就乱七八糟不对呀.有剩余几分钟,也有剩余几小时的,还有剩余几天,总知就是不正确。我怀疑是程序段是调用的服务器时间,与我的程序代码一运算出来的结果,而服务器与每个客户端时间都不一样,所以出的时间差也不一样,对不对?请高手耐心看完程序,帮我解决这个问题。
----------------------------------------------------------------------
.net中设置的时间串
MyDateTime=DateTime.Now.AddMinutes(Convert.ToInt32(sjTime));//当前时间加上考试时间sjTime
string mYear = MyDateTime.Year.ToString(); //年
...... //经过上面运算分别得到月日时分秒,转换成类似"8-1-2006 8:21:23"形式
mytime=mMonth+"-"+mDay+"-"+mYear+" "+mHour+":"+mMinute+":"+mSecond; //.net变量mytime
......
js显示剩余时间程序段,大家帮着看看哪一句有毛病。
<SCRIPT language=javascript>
<!--
function show_student163_time(){
window.setTimeout("show_student163_time()", 1000);
BirthDay=new Date("<%=mytime%>"); //调用.net中的变量
today=new Date();
timeold=(BirthDay.getTime()-today.getTime());//得到秒数,是不是这句在运行中有毛病
sectimeold=timeold/1000
secondsold=Math.floor(sectimeold);
msPerDay=24*60*60*1000
e_daysold=timeold/msPerDay
daysold=Math.floor(e_daysold);//天数
e_hrsold=(e_daysold-daysold)*24;
hrsold=Math.floor(e_hrsold);//小时
e_minsold=(e_hrsold-hrsold)*60;
minsold=Math.floor((e_hrsold-hrsold)*60);//分
seconds=Math.floor((e_minsold-minsold)*60);//秒
window.status = "距离考试结束还有:"+hrsold+"小时"+minsold+"分"+seconds+"秒" ;
}
show_student163_time();
</SCRIPT>
问题点数:50、回复次数:10Top
1 楼RickTroy(崔驰坤 Richard Troy-Rex,RickTroy)回复于 2006-08-01 08:11:51 得分 0
如果你要使用时间计算 就统一开始时间和结束时间都是用客户端时间或者服务器端时间 不然肯定会出问题的Top
2 楼hanlijuncn(大韩)回复于 2006-08-01 08:18:29 得分 0
现在我就搞不懂哪一句调用了服务器时间,哪一句调用的客户机时间
是.net里的MyDateTime=DateTime.Now.AddMinutes(Convert.ToInt32(sjTime))
还是js里的 today=new Date();
现在身边只有一台电脑,也无法验证哪一句在哪台机器上运用呀。
所以下面这句出问题
timeold=(BirthDay.getTime()-today.getTime());Top
3 楼hanlijuncn(大韩)回复于 2006-08-01 08:19:34 得分 0
有什么解决办法让时间都取服务器的或是客户机的Top
4 楼marysxj(走自己的路,让别人打的去吧!)回复于 2006-08-01 08:31:19 得分 10
BirthDay=new Date("<%=mytime%>"); //调用.net中的变量
-----
这句是调用的服务器的时间。
timeold=(BirthDay.getTime()-today.getTime());//得到秒数,是不是这句在运行中有毛病
----
这句是客户端的时间。
如果客户端的时间和服务器的时间不一致,肯定会出现问题。
应该是提取服务器的时间才对,因为客户端的时间客户可以自行修改的。
不过在js中提取服务器的时间好像有点困难。
帮你查找资料。
顺便顶一下。
Top
5 楼xiaomi7732(小米)回复于 2006-08-01 08:38:59 得分 0
一般这种东西都取服务器时间。写在js里的取的是客户端时间。
取服务端时间以后,送显就是问题了,要么你的页自动每秒显示一次,这个用户一多资源消耗量就很大啊。要么用AJAX,动态调用时间。还有一种方法,用Substitution来做。你可以到网上搜索substitution,很多例子都用是来动态显示服务器端时间的。Top
6 楼net_lover(【孟子E章】)回复于 2006-08-01 08:39:10 得分 10
假如你考试时间是120分钟,你就用
var tleft = 120*60*1000
setInterval("tleft--",1000)
来倒计时,不要用绝对时间来计算差值Top
7 楼net_lover(【孟子E章】)回复于 2006-08-01 08:39:35 得分 10
假如你考试时间是120分钟,你就用
var tleft = 120*60
setInterval("tleft--",1000)
来倒计时,不要用绝对时间来计算差值Top
8 楼hanlijuncn(大韩)回复于 2006-08-01 08:49:55 得分 0
net_lover(【孟子章】)你说的有道理,你能否详细写出代码,我对js不熟悉。
考试时间是sjTime存在.net中
要求显示格式为: window.status = "距离考试结束还有:"+hrsold+"小时"+minsold+"分"+seconds+"秒" ;
Top
9 楼leafsword_519(喝水的猪)回复于 2006-08-01 09:48:58 得分 20
借花献佛
锻炼自己
<script>
var tl = 2*60*60;
var h;//小时
var m;//分
var s;//秒
var oInterval = "";
function SuMLeft()
{
tl --;
if (tl > 0)
{
h = Math.floor(tl / 3600);
m = Math.floor((tl - h*60*60) / 60);
s = tl - h*60*60 - m*60;
window.status = "距离考试结束还有:" + h +"小时"+ m + "分"+ s + "秒";
}
else
{
window.status = "考试已结束";
window.clearInterval(oInterval);
}
}
oInterval = window.setInterval("SuMLeft()",1000);
</script>Top
10 楼hanlijuncn(大韩)回复于 2006-08-01 11:12:24 得分 0
感谢各位帮忙。发现一个问题,当刷新网页时,时间从头记时,怎么改装一下
<SCRIPT language=javascript>
var tl = "<%=leftTime%>"*60; //lefttime是.net中的时间
......Top




