注册 登录
编程论坛 ASP技术论坛

【求助】关于一年中旬的问题?

gdk2006 发布于 2008-10-08 17:10, 932 次点击
想这样实现一个程序,一年有365天,然后将每月的每旬单独记录出来,这样的话就有36个记录点,即:2008-1-1到2008-1-10属于一年中的第一旬即(10天一个记录)记做1,2008-1-11-2880-1-20是一年中的第2旬……一直到2008-12-21到2008-12-31是属于最后一个记做36.
想写个函数,然后自动的算出这个时间段是属于一年的那个点,就是1-36这个之间的点,我写了一个如下:
function C_Q(C_date)
    X_C=Clng(DatePart("y",C_date)/10)'==运用函数调出天数然后用天数整除10得出特定旬值==
    if X_C>=1 and X_C<=36 then
        C_Q=X_C
    elseif X_C>36 then
        C_Q=36
    elseif X_C<=0 then
        C_Q=1
    end if
end function

但是发现1月份的时候就有问题,到2008-1-12的时候结果不是2。

我还想了另外的办法,实现是可以实现但是很复杂,要判断很多东西,看大家有没有跟简单的方法。谢谢了!
9 回复
#2
gdk20062008-10-08 17:13
【求助】关于一年中旬的问题?
想这样实现一个程序,一年有365天,然后将每月的每旬单独记录出来,这样的话就有36个记录点,即:2008-1-1到2008-1-10属于一年中的第一旬即(10天一个记录)记做1,2008-1-11-2880-1-20是一年中的第2旬……一直到2008-12-21到2008-12-31是属于最后一个记做36.
想写个函数,然后自动的算出这个时间段是属于一年的那个点,就是1-36这个之间的点,我写了一个如下:
function C_Q(C_date)
    X_C=Clng(DatePart("y",C_date)/10)'==运用函数调出天数然后用天数整除10得出特定旬值==
    if X_C>=1 and X_C<=36 then
        C_Q=X_C
    elseif X_C>36 then
        C_Q=36
    elseif X_C<=0 then
        C_Q=1
    end if
end function

但是发现1月份的时候就有问题,到2008-1-12的时候结果不是2。

我还想了另外的办法,实现是可以实现但是很复杂,要判断很多东西,看大家有没有跟简单的方法。谢谢了!
#3
cslldu2008-10-08 22:37
很菜的一个方法
我刚学ASP,用了一个很菜的方法,不过也出错了,计算老不正确,不知道错在哪里,请高手指点!:
function comp36(DtarDay)
    intM = month(DtarDay)
    intD = day(DtarDay)
    select case intM
        case 1
            strB = "1,2,3"
        case 2
            strB = "4,5,6"
        case 3
            strB = "7,8,9"
        case 4
            strB = "10,11,12"
        case 5
            strB = "13,14,15"
        case 6
            strB = "16,17,18"
        case 7
            strB = "19,20,21"
        case 8
            strB = "22,23,24"
        case 9
            strB = "25,26,27"
        case 10
            strB = "28,29,30"
        case 11
            strB = "31,32,33"
        case 12
            strB = "34,35,36"
    end select
    ArrB = split(strB,",")
    select case intD
        case intD <= 10
            comp36 = ArrB(0)
        case d>10 and d <=20
            comp36 = ArrB(1)
        case else
            comp36 = ArrB(2)
    end select
end function
#4
cslldu2008-10-08 22:39
更菜的方法是用36个CASE,呵呵,
#5
gdk20062008-10-09 11:36
楼上的代码稍加改动就可以了:

function comp36(DtarDay)
    intM = Cint(month(DtarDay))
    intD = Cint(day(DtarDay))
    select case intM
        case 1
            strB = "1,2,3"
        case 2
            strB = "4,5,6"
        case 3
            strB = "7,8,9"
        case 4
            strB = "10,11,12"
        case 5
            strB = "13,14,15"
        case 6
            strB = "16,17,18"
        case 7
            strB = "19,20,21"
        case 8
            strB = "22,23,24"
        case 9
            strB = "25,26,27"
        case 10
            strB = "28,29,30"
        case 11
            strB = "31,32,33"
        case 12
            strB = "34,35,36"
    end select
    ArrB = split(strB,",")
    if intD>=1 and intD <= 10 then
        comp36 = ArrB(0)
    elseif intD>10 and intD <=20 then
        comp36 = ArrB(1)
    elseif intD >=21 and intD <=31 then
        comp36 = ArrB(2)
    end if
end function
#6
gdk20062008-10-09 11:37
终于实现了!!感谢cslldu
#7
gdk20062008-10-09 14:05
[bo][un]gdk2006[/un] 在 2008-10-9 11:36 的发言:[/bo]

楼上的代码稍加改动就可以了:

function comp36(DtarDay)
    intM = Cint(month(DtarDay))
    intD = Cint(day(DtarDay))
    select case intM
        case 1
            strB = "1,2,3"
        case ...



这个不知道还有没有更简单的方法!
#8
永夜的极光2008-10-09 15:13
DatePart("y",C_date)返回到指定日期的天数
如果是DatePart("y","2008-1-12"),结果是12,
12/10=1,怎么可能是2呢?
#9
cslldu2008-10-09 18:48
原来如此,多谢gdk2006指点!
#10
gdk20062008-10-10 17:30
[bo][un]永夜的极光[/un] 在 2008-10-9 15:13 的发言:[/bo]

DatePart("y",C_date)返回到指定日期的天数
如果是DatePart("y","2008-1-12"),结果是12,
12/10=1,怎么可能是2呢?


就是因为这个方法不行所以就用了其他的方法了!
1