第 16 楼
发表于 2007-05-02 17:52 · 中国 陕西 西安 电信
铂金会员
★★★★
积分 5,212
发帖 2,478
注册 2007-02-08 23:39
19年会员
UID 79003
性别 男
状态 离线
我有个思路就是求余...除365 余数Y1再先对4求余(闰年)看有几个闰年给Y1要再减几个1,得到Y2
然后Y2化成月和日即可。。。
(哈哈,还是execute够偷懒)
第 17 楼
发表于 2007-05-02 18:10 · 中国 广东 广州 海珠区 电信
银牌会员
★★★
积分 1,206
发帖 517
注册 2007-03-25 01:18
19年会员
UID 82819
性别 男
状态 离线
噢。仔细看了一下。确实考虑到了闰年。。
原理研究中?
知,不觉多。不知,乃求知
第 18 楼
发表于 2007-05-02 18:24 · 中国 广东 广州 海珠区 电信
银牌会员
★★★
积分 1,206
发帖 517
注册 2007-03-25 01:18
19年会员
UID 82819
性别 男
状态 离线
Originally posted by slore at 2007-5-2 04:52 AM:
我有个思路就是求余...除365 余数Y1再先对4求余(闰年)看有几个闰年给Y1要再减几个1,得到Y2
然后Y2化成月和日即可。。。
(哈哈,还是execute够偷懒)
现在不管你偷懒与否。。。
给出大家所需要的代码出来吧。。
这一点上,无论如何请不要偷懒了。
知,不觉多。不知,乃求知
第 19 楼
发表于 2007-05-02 18:28 · 中国 陕西 西安 电信
铂金会员
★★★★
积分 5,212
发帖 2,478
注册 2007-02-08 23:39
19年会员
UID 79003
性别 男
状态 离线
晕死,好像叫新建 脚本文件.vbs
貌似删除了。。那重写看看好了=。=
第 20 楼
发表于 2007-05-02 18:36 · 中国 广东 广州 海珠区 电信
银牌会员
★★★
积分 1,206
发帖 517
注册 2007-03-25 01:18
19年会员
UID 82819
性别 男
状态 离线
Originally posted by slore at 2007-5-2 05:28 AM:
晕死,好像叫新建 脚本文件.vbs
貌似删除了。。那重写看看好了=。=
呵呵,辛苦了:)
期盼ing。
知,不觉多。不知,乃求知
第 21 楼
发表于 2007-05-02 20:41 · 中国 陕西 西安 电信
铂金会员
★★★★
积分 5,212
发帖 2,478
注册 2007-02-08 23:39
19年会员
UID 79003
性别 男
状态 离线
Dim ADYear
Dim ADMonth
Dim ADDay
Dim ADDDay
Dim RnMod
Dim Mon(12)
Dim strDate, strADDay
strDate = "2007-3-4"
strADDay = 800
ADYear = Year(strDate)
RnMod = ADYear Mod 4
If RnMod = 0 Then tempRNYear = 1
ADMonth = Month(strDate)
ADDay = Day(strDate)
strADDay = strADDay + Date2Day(ADYear, ADMonth, ADDay)
tempYear = strADDay \ 365
tempRNday = strADDay Mod 365
If tempYear <> 0 Then
tempRNYear = tempRNYear + (RnMod + tempYear) \ 4
tempRNday = tempRNday - tempRNYear
End If
ADYear = ADYear + tempYear
MsgBox Day2Date(ADYear, tempRNday)
Function Date2Day(ByVal y, ByVal m, ByVal d)
Mon(1) = 31: Mon(2) = 28: Mon(3) = 31: Mon(4) = 30: Mon(5) = 31: Mon(6) = 30
Mon(7) = 31: Mon(8) = 31: Mon(9) = 30: Mon(10) = 31: Mon(11) = 30: Mon(12) = 31
Date2Day = 0
If IsDate(y & "/2/29") Then Mon(2) = 29
Dim i
For i = 1 To m - 1
Date2Day = Date2Day + Mon(i)
Next
Date2Day = Date2Day + d
End Function
Function Day2Date(ByVal y, ByVal Days)
Mon(2) = 28
If IsDate(y & "/2/29") Then Mon(2) = 29
Dim i
If Days > 31 Then
For i = 1 To 11
If Days < Mon(i) Then Exit For
Days = Days - Mon(i)
Next
ADMonth = i
Else
ADMonth = 1
End If
Day2Date = y & "-" & ADMonth & "-" & Days
End Function
因为每400年有97个闰年,所以存在过8年才一个闰年的情况,所以2000年为初始年的话,你不要去计算146000后的日子,那样会差1,2天,因为我是按每4年一个闰年算的。
这里我只写了+上天数的。。。-的自己改。。。我写这个只是用代码呈现下我的思路而已。。。
第 22 楼
发表于 2007-05-02 20:45 · 中国 陕西 西安 电信
铂金会员
★★★★
积分 5,212
发帖 2,478
注册 2007-02-08 23:39
19年会员
UID 79003
性别 男
状态 离线
8000天也是很快的。。。呵呵
在strADDay=800下面加:
execute("msgbox #" & strDate & "#+" & strADDay)验证下。。。
10000还是正确的。。2000000就乱78糟了。。。我不改了。。。思路明白就OK
第 23 楼
发表于 2007-05-02 21:27 · 中国 广东 广州 海珠区 电信
银牌会员
★★★
积分 1,206
发帖 517
注册 2007-03-25 01:18
19年会员
UID 82819
性别 男
状态 离线
刚刚测试了一下。。还算标准。。。
我写的不够用。。到时再换新的上来。。。
知,不觉多。不知,乃求知
第 24 楼
发表于 2007-06-08 08:56 · 中国 广东 电信
荣誉版主
★★★★
batch fan
积分 5,226
发帖 1,737
注册 2006-03-10 00:38
20年会员
UID 51697
来自 成都
状态 离线
在整理索引帖子的时候发现了这个帖子,刚好本人昨天发了个求N天前日期的帖子,请参考这里:
求N天前日期的批处理
尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
第 25 楼
发表于 2007-06-08 10:44 · IANA 局域网IP(Private-Use)
银牌会员
★★★
积分 2,000
发帖 621
注册 2007-01-01 00:00
19年会员
UID 75212
性别 男
状态 离线
Originally posted by flyinspace at 2007-5-2 05:34 PM:
算法很简单。。
也比我的用得聪明。。。但因为没有考虑闰年的存在。。
计算长一点的天数时就会出问题。。。
若加入闰年的判断。。会好很多。
没仔细看willsort的代码;
但是 瞥到了这一句;
dd+y*365+y/4-y/100+y/400
这一句 就说明了考虑到了闰年;
这种用法不是挺经典的算法么
第 26 楼
顶~!
发表于 2007-06-12 23:55 · 中国 广东 深圳 龙岗区 电信
新手上路
★
积分 15
发帖 7
注册 2006-06-23 13:36
20年会员
UID 57456
状态 离线
第 27 楼
第 15 楼
发表于 2008-04-17 17:19 · 中国 浙江 杭州 电信
新手上路
★
积分 2
发帖 1
注册 2008-04-17 16:52
18年会员
UID 116164
性别 男
状态 离线
第 28 楼
发表于 2009-11-28 13:55 · 中国 北京 联通
新手上路
★
积分 4
发帖 4
注册 2009-11-24 00:25
16年会员
UID 155228
性别 男
状态 离线
论坛跳转: