【问题标题】:How does the DateAdd function in ASP Classic work with the "ww" weeks option?ASP Classic 中的 DateAdd 函数如何与“ww”周选项一起使用?
【发布时间】:2018-11-30 05:45:00
【问题描述】:

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

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

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

我的问题是,

DateAdd("ww", x, date) 

工作?

是否相当于

date.AddDays(7 * x) 

在 C# 中?

是否存在极端情况,例如 1 月 1 日是星期六,并且 DateAdd("ww", 53, date) 可以返回同一年的有效日期?

【问题讨论】:

标签: vbscript asp-classic


【解决方案1】:

我可以告诉你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),而不必担心日期不匹配。

【讨论】:

  • 谢谢,这正是我想知道的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多