【问题标题】:How do I convert a calendar week into a date in Excel?如何在 Excel 中将日历周转换为日期?
【发布时间】:2012-06-15 06:59:45
【问题描述】:

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

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

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

【问题讨论】:

    标签: excel date excel-formula


    【解决方案1】:

    如果周数在A1,年份在A2,你可以试试:

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

    【讨论】:

    • 那不一定会给你一个星期一的约会?
    【解决方案2】:

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

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

    假设 A2 为年份,B2 为周数

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

    【讨论】:

    • 这行得通,但您必须使用分号而不是逗号。
    • 您是否使用逗号或分号作为“参数分隔符”取决于您的区域设置 - 对我来说,它适用于逗号。在通常使用逗号作为小数分隔符的地区,通常需要分号
    【解决方案3】:

    一个简单的解决方案是做这个公式:

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

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

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

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

    【讨论】:

      【解决方案4】:

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

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

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

      【讨论】:

        【解决方案5】:

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

        yyww 作为给定的周 exp:2014 年第 51 周将是 1451

        【讨论】:

          【解决方案6】:

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

          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)
          

          【讨论】:

            【解决方案7】:

            如果您正在寻找相反的方式从周数中获取日期,我在网上找到了一个解决方案并稍作更改:

            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
            

            我拿了formular from 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 年硬编码并不理想,您可以使用此功能 check if a year is a leap year

            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
            

            【讨论】:

              【解决方案8】:

              如果您的周数在 A1 中,年份在 A2 中,则以下 sn-p 可以为您提供整周的日期

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

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

              希望这会有所帮助。

              【讨论】:

                猜你喜欢
                • 2015-02-08
                • 1970-01-01
                • 2012-07-07
                • 2021-05-25
                • 1970-01-01
                • 2015-11-22
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多