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)
而不必担心日期不匹配。
我必须从旧的 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)
而不必担心日期不匹配。