Vbscript ASP Classic中的DateAdd函数如何处理;ww";几周的选择?

Vbscript ASP Classic中的DateAdd函数如何处理;ww";几周的选择?,vbscript,asp-classic,Vbscript,Asp Classic,我必须从旧的asp经典代码库复制C#中的功能 代码库似乎假设一年最多有54周,并使用带有“ww”选项的DateAdd方法来计算“week ID”,以便对某些文件进行分类 我发现的所有在线文档似乎都忽略了这个问题,简单地阅读一下就可以发现,添加周数与添加(周*7)天数是一样的,但是,我不想破坏向后兼容性。我认为旧代码有一个off-by-one错误,但我不想假设它。一年中有可能有54个不同的星期,但我认为做一个值大于52的DateAdd是没有意义的 我的问题是,这个问题如何解决 DateAdd("w

我必须从旧的asp经典代码库复制C#中的功能

代码库似乎假设一年最多有54周,并使用带有“ww”选项的DateAdd方法来计算“week ID”,以便对某些文件进行分类

我发现的所有在线文档似乎都忽略了这个问题,简单地阅读一下就可以发现,添加周数与添加(周*7)天数是一样的,但是,我不想破坏向后兼容性。我认为旧代码有一个off-by-one错误,但我不想假设它。一年中有可能有54个不同的星期,但我认为做一个值大于52的DateAdd是没有意义的

我的问题是,这个问题如何解决

DateAdd("ww", x, date) 
工作

它是否等同于

date.AddDays(7 * x) 
在C#中


是否存在这样的边缘情况:1月1日是星期六,DateAdd(“ww”,53,date)可以返回同一年的有效日期?

我可以告诉你,
DateAdd(“ww,I,date)
相当于
DateAdd(“d”,7*I,date)
;因此,如果
C#
vbScript
中的两个函数具有相同的含义,则它们必须是等效的

为确保
DateAdd(“ww”,i,date)
等同于
DateAdd(“d”,7*i,date)
我使用了下面的脚本,它循环2年,每天循环104周如果添加天数或添加周不匹配,则会引发错误

date0 = Date()

For i = 0 to 2 * 365
    date1 = DateAdd("d", i, date0)
    For j = 0 to 2 * 53
        date2  = DateAdd("d", j * 7, date1)
        date3  = DateAdd("WW", j, date1)
        assert = DateDiff("s", date2, date3)

        If assert <> 0 Then
            errMsg = _
                "OPS addDays And addWeeks unmatched" &_
                vbCrLf &_
                CStr(date1) & vbTab &_
                CStr(date2) & vbTab &_
                CStr(date3) & vbTab &_
                assert & vbTab

            Call Err.Raise(vbObjectError + 10, "Test DateAdd(""ww"", i, date)", errMsg)
        End If
    Next
Next
date0=Date()
对于i=0到2*365
date1=DateAdd(“d”,i,date0)
对于j=0到2*53
date2=DateAdd(“d”,j*7,date1)
date3=DateAdd(“WW”,j,date1)
assert=DateDiff(“s”,date2,date3)
如果断言为0,则
errMsg=_
“OPS addDays和addWeeks不匹配”&_
vbCrLf&_
CStr(日期1)和vbTab&_
CStr(日期2)和vbTab&_
CStr(日期3)和vbTab&_
assert&vbTab
调用Err.Raise(vbObjectError+10,“测试日期添加”(“ww”,i,date)”,errMsg)
如果结束
下一个
下一个

因此,我想您可以使用
date.AddDays(7*x)
替换
DateAdd(“ww”,x,date)
,而不必担心日期不匹配。

自己比较它们。谢谢,这正是我想知道的。