CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  ASP.NET

菜鸟再问,客户端显示时间差不对,已经48小时没有人给出详解了(火急)

楼主hanlijuncn(大韩)2006-08-01 08:09:37 在 .NET技术 / ASP.NET 提问

首先,感谢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

相关问题

关键词

得分解答快速导航

  • 帖主:hanlijuncn
  • marysxj
  • net_lover
  • net_lover
  • leafsword_519

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo