23

我有一个周数和一年,并想在 Microsoft Excel 中计算该特定周的星期一的日期。

Year   Week   Date (Monday)
2012   1      January 2, 2012
2013   16     April 15, 2013
2014   42     October 13, 2014

我可以使用什么公式将日历周转换为特定日期?

4

8 回答 8

57

对于 ISO 周数,您可以使用此公式获取星期一

=DATE(A2,1,-2)-WEEKDAY(DATE(A2,1,3))+B2*7

假设 A2 中的年份和 B2 中的周数

这和我在这里的回答一样https://stackoverflow.com/a/10855872/1124287

于 2012-06-12T13:05:22.603 回答
2

以下公式适用于每年。你不需要再调整它了。前提是星期一是你一周的第一天。

If A2 = Year and Week = B2
=IF(ISOWEEKNUM(DATE($A$2;1;1)-WEEKDAY(DATE($A$2;1;1);2)+1)>1;DATE($A$2;1;1)-WEEKDAY(DATE($A$2;1;1);2)+1+B2*7;DATE($A$2;1;1)-WEEKDAY(DATE($A$2;1;1);2)-6+B2*7)
于 2015-01-07T10:31:37.763 回答
1

如果您的周数在 A1 中并且年份在 A2 中,则以下代码段可以为您提供整周的日期

=$A$1*7+DATE($B$1,1,-4) through =$A$1*7+DATE($B$1,1,2)

当然,完成从 -4 到 2 的系列,您将拥有从周日到周六的日期。

希望这可以帮助。

于 2016-04-05T13:24:40.417 回答
0

如果您正在寻找相反的东西来从周数中获取日期,我在网上找到了一个解决方案并稍微改变了它:

Function fnDateFromWeek(iYear As Integer, iWeek As Integer, iWeekDday As Integer)
  ' get the date from a certain day in a certain week in a certain year
  fnDateFromWeek = DateSerial(iYear, 1, (iWeek * 7) _
          + iWeekDday - Weekday(DateSerial(iYear, 1, 1)) + 1)
End Function

从 asap-utilities.com/ 获取了公式并更改了

DateSerial(iYear, 1, ((iWeek - 1) * 7) 

DateSerial(iYear, 1, (iWeek * 7)

更新

似乎至少对于德国来说,公式在2016 年闰年的工作方式不如预期,所以我把它改成了这个

Function fnDateFromWeek(iYear As Integer, iWeek As Integer, iWeekDday As Integer)
' get the date from a certain day in a certain week in a certain year
  
    If isLeapYear(iYear) Then
        curDate = DateSerial(iYear, 1, ((iWeek) * 7) _
          + iWeekDday - Weekday(DateSerial(iYear, 1, 1)) + 1)
    Else
        curDate = DateSerial(iYear, 1, ((iWeek - 1) * 7) _
          + iWeekDday - Weekday(DateSerial(iYear, 1, 1)) + 1)
    End If
    fnDateFromWeek = curDate
End Function

由于 2016 年硬编码并不理想,您可以使用此功能检查一年是否为闰年

Function isLeapYear(iYear As Integer) As Boolean

    If (Month(DateSerial(iYear, 2, 29)) = 2) Then
        isLeapYear = True
    Else
        isLeapYear = False
    End If
    
End Function

对于非闰年的DateSerial(iYear,2 ,29)回报,3 月 1 日

这可能仍然是错误的,但我有限的测试给出了预期的结果:

Sub TestExample()
   Debug.Print Format(fnDateFromWeek(2014, 48, 2), "ddd dd mmm yyyy") ' mo 24 Nov 2014
   Debug.Print Format(fnDateFromWeek(2015, 11, 6), "ddd dd-mmm-yyyy") ' fr 13 Mar 2015
   Debug.Print Format(fnDateFromWeek(2016, 36, 2), "ddd dd-mmm-yyyy") ' Mo 05 Sep 2015
End Sub
于 2015-03-16T13:48:09.010 回答
0

如果 A1 的周数和年份为 3 或 4 位整数,格式为 wwYY,则公式为:

=INT(A1/100)*7+DATE(MOD([A1,100),1,1)-WEEKDAY(DATE(MOD(A1,100),1,1))-5

工作日的减法确保您返回一周的一致开始日。使用最后的减法来调整开始日期。

于 2014-05-24T19:55:19.817 回答
0

=(MOD(R[-1]C-1,100)*7+DATE(INT(R[-1]C/100+2000),1,1)-2)

yyww 作为给定的周 exp:week 51 year 2014 将是 1451

于 2014-10-30T04:40:20.813 回答
0

一个简单的解决方案是执行以下公式:

A1*7+DATE(A2,1,1)

如果它返回星期三,只需将公式更改为:

(A1*7+DATE(A2,1,1))-2

这仅适用于一个日历年内的日期。

于 2013-05-02T02:39:40.047 回答
0

如果周数在 中A1,年份在 中A2,您可以尝试:

A1*7+DATE(A2,1,1)
于 2012-06-12T11:47:25.523 回答