ASP Classic 中的 DateAdd 函数如何与 "ww" 周选项一起使用?

How does the DateAdd function in ASP Classic work with the "ww" weeks option?

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

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

我找到的所有在线文档似乎都忽略了这个问题,直接阅读它表明添加周数与添加 (weeks * 7) 天相同,但是,我不想倒退兼容性。我认为旧代码有一个错误,但我不想假设它。一年可能有 54 个不同的星期,但我认为做一个值大于 52 的 DateAdd 是没有意义的。

我的问题是,

DateAdd("ww", x, date) 

工作?

是否相当于

date.AddDays(7 * x) 

在 C# 中?

是否存在一月一日落在(例如)星期六并且 DateAdd("ww", 53, date) 可以 return 同一年的有效日期的边缘情况?

我可以告诉你,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

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