CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Web 开发 >  ASP

一个关于时间的算法求解!

楼主dddggg(罡子)2005-06-04 20:56:48 在 Web 开发 / ASP 提问

我想解决这样的一个问题:  
   
  算出当前日期与以前一固定日期相差的时间,以年、月、天的方式显示出来  
   
  比如:  
  第一日期是:2005-6-4        
  第二日期是:2004-6-10  
   
  算出的结果应该是:0年12个月25天  
   
  求其算法! 问题点数:20、回复次数:17Top

1 楼lovebeyondforever(我不信)回复于 2005-06-04 21:18:16 得分 0

<script   language="vbScript">  
  <!--  
  a=cdate("2005-6-4")  
  b=cdate("2004-6-10")  
  c=DateDiff("d",a,b)  
  msgbox   c  
  -->  
  </script>Top

2 楼qiozi(【悟】.欢希欢南换)回复于 2005-06-04 21:27:51 得分 0

11个月吧,   12个月,咋还会是0年?  
  Top

3 楼dddggg(罡子)回复于 2005-06-04 21:27:52 得分 0

不行呀,我要算出这个数字是几年几月几天的呀!!!!!!!!!Top

4 楼dddggg(罡子)回复于 2005-06-04 21:57:12 得分 0

呵呵,写错了,应该是0年11个月25天,请指高招!Top

5 楼yupenger690(烟波淼淼)回复于 2005-06-04 22:27:38 得分 0

我也有相同的问题啊!怎么计算两个时间之间的差值啊?Top

6 楼lovebeyondforever(我不信)回复于 2005-06-04 22:33:18 得分 0

不好意思   没看清题目  
  <script   language=vbs>  
  myTime   =   "2004-6-10"  
  myTime2=   "2005-6-4"  
   
  document.Write   cdate(cdate(myTime2)-cdate(myTime))  
  </script>  
   
  结果:  
  1900-12-24     郁闷!Top

7 楼dddggg(罡子)回复于 2005-06-04 22:34:59 得分 0

这个问题我用了好几个笨的方法来算也没有算出来!麻烦呀!Top

8 楼loveasp007(爱死拼)回复于 2005-06-05 01:19:27 得分 0

应该没问题的,时间太紧了,我还要做网站,帮你顶下吧.Top

9 楼IT_Fish(游泳在IT的鱼)回复于 2005-06-05 01:49:35 得分 1

<Script   Language   =   "JavaScript">  
  function   time1()  
  {  
  now=new   Date();  
  m=now.getMonth();  
  n=now.getYear()  
  a=2005-now.getYear();  
  b=12-now.getMonth();  
  if(m=1,3,5,7,8,10,12){c=31-now.getDate()}  
  if(m=4,6,9){c=30-now.getDate()}  
  if(m=2){c=28-now.getDate()}  
  if(n=2004,2008){c=29-now.getDate()}  
  e="0"+24-now.getHours();  
  f="0"+59-now.getMinutes();  
  g="0"+60-now.getSeconds();  
  if(e>10){e=24-now.getHours()}  
  if(f>10){f=59-now.getMinutes()}  
  if(g>10){g=60-now.getSeconds()}  
  if   (a<0)   {a=0}  
  if   (b=12)   {b=0}  
   
  document.Time.CLOCK.value="离此版块开通还有"+a+"年"+b+"个月"+c+"天"+e+"小时"+f+"分"+g+"秒"  
  setTimeout(   'time1()',1000)  
  }  
  </SCRIPT>  
   
  自己看下吧,原理相同Top

10 楼renjunjun(飞黄)回复于 2005-06-05 02:10:30 得分 17

20分这么多还记我写半天,原理什么的我就不说了,我只给正确结果,分不都给我下次看见你我就闪哦!  
   
  嘿嘿,大家不好意思了!总之一句话:思路比技术重要!  
   
  <%  
  Date1=#2004-6-10#:Date2=#2005-6-4#:I=0  
  Response.Write   "较小日期:"   &   Date1   &   "<br>"  
  Response.Write   "较大日期:"   &   Date2   &   "<br>"  
  do   until   DateAdd("yyyy",I,Date1)>Date2:I=I+1:loop  
  TheYear=I-1:I=0:Date1=DateAdd("yyyy",TheYear,Date1)  
  do   until   DateAdd("m",I,Date1)>Date2:I=I+1:loop  
  TheMonth=I-1:I=0:Date1     =DateAdd("m",TheMonth,Date1)  
  do   until   DateAdd("d",I,Date1)>Date2:I=I+1:loop  
  TheDay=I-1:I=0:Date1=DateAdd("d",TheDay,Date1)  
  Response.Write   "相差时间:"   &   TheYear   &   "年"   &   TheMonth   &   "月"   &   TheDay   &   "日"  
  %>Top

11 楼superdullwolf(超级大笨狼,每天要自强,MVP)回复于 2005-06-05 02:47:24 得分 0

你的问题不合理,半月怎么算?Top

12 楼superdullwolf(超级大笨狼,每天要自强,MVP)回复于 2005-06-05 02:49:21 得分 0

日期是直接可以做循环的,这么写就行  
   
  for   i=Cdate("2005-6-4")   to   Cdate("2004-6-10")  
  nextTop

13 楼renjunjun(飞黄)回复于 2005-06-05 02:55:21 得分 0

笨狼兄,楼上这段何解?没有理解,难道是思路问题?Top

14 楼wtogether(wtogether)回复于 2005-06-05 09:17:45 得分 1

<script   language="vbscript">  
  a   =   CDate("2005-6-4")  
  b   =   CDate("2004-6-10")  
  c   =   DateDiff("d",   b,   a)  
  y   =   c\365  
  m   =   (c   mod   366)\30  
  d   =   c  
  For   i=1   To   m  
  Select   Case   i  
  case   1,   3,   5,   7,   8,   10,   12  
  d   =   d   -   31  
  Case   2  
  d   =   d   -   29'2月你按29天算就是0年11月24天,按28天算就是0年11个月25天  
  Case   Else  
  d   =   d   -   30  
  End   Select  
  Next  
  Alert   y   &   "年"   &   m   &   "月"   &   d   &   "日"  
  </script>  
  Top

15 楼ShiningstarHu(Shining_star)回复于 2005-06-05 11:46:51 得分 1

wtogether(wtogether)     的方法和我想得一样,原理是把两个日期之间的差用需求所需的最小单位来计算,这里是天,因此他用了Datadiff("d",...,...)的方法求所差得天数,但是他这个方法是有问题的.  
  最后的一个循环有点画蛇添足了.   他用两个日期之间的总天数循环去减经历的月份,根据大月小月的判断不断去减30或者31,并且考虑到了闰年问题,这种做法只有在需要比较的这两个日期之间正好是一整年或者是1整年的倍数.也就是说这两个日期之间经历1-12月的次数是相同的才能得出正确结果.  
   
  如果我现在给两个日期b   =   CDate("2005-7-1")   a   =   CDate("2005-8-31")   ,根据DateDiff返回值是61天,如果b   =   CDate("2005-7-1")   a   =   CDate("2005-9-30")DateDiff返回值是91天,根据wtogether(wtogether)的方法我的第一个例子的结果是   "0年2月1天"   第二个例子的结果是   "0年3月0天"   但事实上,我这两个例子的结果应该很明确第一个是2个月,第二个是3个月.  
   
  wtogether(wtogether)的方法问题就在于最后那个循环,因为他总是从1月开始做起,结果我给的两个例子中没有一个是有1月的,只不过他们之间差了2个月或者3个月.  
   
  因此,wtogether(wtogether)的方法需要修改.简单的修改就是首先去掉最后一个循环.  
   
  <script   language="vbscript">  
  a   =   CDate("2005-6-4")  
  b   =   CDate("2004-6-10")  
  c   =   DateDiff("d",   b,   a)  
  y   =   c\365                             '不能简单的除以365天,要看两个日期间到底经历过多少个闰年的2月  
                                                '后面的365也是一样的处理.  
  m   =   (c   mod   365)\30           '这里其实要除以每月的平均天数而不是简单的30天  
  d   =   (c   mod   365)   mod   30     '这里除的余数其实就是天数了.(但是一样不是简单的30,要和上面的一样)  
  Alert   y   &   "年"   &   m   &   "月"   &   d   &   "日"  
   
  '经过这样修改,搂住可以准确地求出你需要的答案   :)  
  </script>  
  Top

16 楼renjunjun(飞黄)回复于 2005-06-05 17:53:33 得分 0

哈哈,还是我的算法精确!Top

17 楼dddggg(罡子)回复于 2005-06-07 11:49:47 得分 0

大家辛苦了,renjunjun(飞黄)   写的的确不错,最大分就给你,其他仁兄就分配点小分吧,以此鼓励,希望renjunjun(飞黄)不要太介意!有福要同享呀!:)Top

相关问题

  • 算法求解
  • 求解算法
  • 求解算法,急
  • 求解一算法
  • 求解一算法
  • 求解一个算法的时间复杂度
  • 魔方算法求解?
  • 求解一算法难题!
  • 高分求解算法
  • 求解发牌算法!

关键词

  • 循环
  • 原理
  • date
  • wtogether
  • cdate
  • 日期
  • 月
  • dateadd
  • 结果
  • 方法

得分解答快速导航

  • 帖主:dddggg
  • IT_Fish
  • renjunjun
  • wtogether
  • ShiningstarHu

相关链接

  • Web开发类图书

广告也精彩

反馈

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