Home » Create 2025 Broadcast Calendar

Create 2025 Broadcast Calendar

Develop Broadcast Calendar for 2025. The broadcast calendar is a standardized calendar used primarily for the planning and purchase of radio and television programs and advertising. Rules to develop – 1. A week starts from Monday and ends on Saturday. 2. First week of every month will contain date 1st of that month. 3. The number of weeks in a broadcast month is based on the number of Sundays that fall in that month.

📌 Challenge Details and Links
ExcelBI Excel Challenge Number: 695
Challenge Difficulty: ⭐️
📥Download Sample File
📥Link to the solutions on LinkedIn

Solving the challenge of Create 2025 Broadcast Calendar with Power Query

Power Query solution 1 for Create 2025 Broadcast Calendar, proposed by Kris Jaganah:
let
 A = 2025,
 B = (r)=> hashtag#duration(r,0,0,0),
 C = List.Dates( List.Select (List.Dates(hashtag#date(A-1,12,25) , 7 , B(1)) , 
 (v)=> Date.DayOfWeek(v) = 0 ){0} , 52 ,B(7)),
 D = List.Dates( C{0}+B(6),52, B(7)),
 E = List.Transform( D , each Date.ToText(_ ,[Format = "MMM"])),
 F = List.Count(E),
 G = List.Generate(()=> [a = 0 , b = E{a} , c = 1 ] , 
 each [a] 
Power Query solution 2 for Create 2025 Broadcast Calendar, proposed by Alejandro Simón 🇵🇦 🇪🇸:
let
Source = List.Dates(hashtag#date(2025,1,1),364, hashtag#duration(1,0,0,0)),
Weeks = List.Distinct(List.Transform(Source, each {Date.StartOfWeek(_,1), Date.EndOfWeek(_,1)})),
Tbl = Table.FromRows(List.Transform(Weeks, each 
 {Text.Start(Date.MonthName(_{1}, "en-US"),3), Date.WeekOfYear(_{1})-1, _{0}, _{1}}), 
 {"Month", "Month Week", "From Date", "To Date"}),
 #"2025" = Table.SelectRows(Tbl, each Date.Year([To Date])=2025),
Sol = Table.Combine(Table.Group(#"2025", {"Month"}, {{"A", each 
 let
 a = _,
 b = Table.AddIndexColumn(a, "Year Week", 1)
 [[Month], [Month Week], [Year Week], [From Date], [To Date]]
 in b}},0)[A])
in
Sol


                    
                  
          
Power Query solution 3 for Create 2025 Broadcast Calendar, proposed by Antriksh Sharma:
let
 Years   = { 2025, 2026, 2027 }, 
 Fx    = ( Year ) =>
 let
 BroadcastList = List.Generate (
 () => [ Start = Date.StartOfWeek ( hashtag#date ( Year, 01, 01 ), Day.Monday ), End = Date.EndOfWeek ( Start, Day.Monday ), WeekCounter = 1 ], 
 each [Start] < Date.StartOfWeek ( Date.EndOfYear ( hashtag#date ( Year, 01, 01 ) ), Day.Monday ), 
 each [ Start = Date.AddDays ( [End], 1 ), End = Date.EndOfWeek ( Start, Day.Monday ), WeekCounter = if Date.Month ( End ) <> Date.Month ( Start ) or Date.Day ( Start ) = 1 then 1 else [WeekCounter] + 1 ], 
 each [ From = [Start], To = [End], Month Week = [WeekCounter] ]
 ), 
 AddMonth   = Table.AddColumn ( Table.FromRecords ( BroadcastList, type table [ From = date, To = date, Month Week = Int64.Type ] ), "Month", each Text.Start ( Date.MonthName ( [To] ), 3 ), type text ), 
 AddYearWeek  = Table.AddIndexColumn ( AddMonth, "Year Week", 1, 1, Int64.Type )
 in
 AddYearWeek, 
 Broadcast = List.Transform ( Years, Fx ), 
 Combine  = Table.Combine ( Broadcast )
in
 Combine
                    
                  
          
Power Query solution 4 for Create 2025 Broadcast Calendar, proposed by Peter Krkos:
let
 Source = Table.FromList(List.Dates(hashtag#date(2024,12,30), 367, hashtag#duration(1,0,0,0)), (x)=> {x}, type table[From Date=date]),
 Grouped = Table.SelectRows(
 Table.Group(Source, "From Date", {{"B", each _},
 {"Month", each Date.ToText(List.Last([From Date]), [Format="MMM", Culture="en-US"]), type text},
 {"To Date", each List.Last([From Date]), type date}},
 0, (x,y)=> Byte.From(Date.DayOfWeek(y, Day.Monday) = 0)),
 each Table.RowCount([B]) = 7),
 Ad_MonthWeek = Table.Combine(Table.Group(Grouped, {"Month"}, {{"T", each Table.AddIndexColumn(_, "Month Week", 1, 1, Int64.Type), type table}})[T]),
 Ad_YearWeek = Table.SelectColumns(Table.AddIndexColumn(Ad_MonthWeek, "Year Week", 1, 1, Int64.Type), {"Month", "Month Week", "Year Week", "From Date", "To Date"})
in
 Ad_YearWeek


                    
                  
          
Power Query solution 5 for Create 2025 Broadcast Calendar, proposed by Alexandre Garcia:
((x)=> 
[
A = {"Month", "Month Week", "Year Week", "From Date", "To Date"},
B = Table.FromRows(List.Transform({1..52}, each ((x)=> {Date.ToText(List.Max(x), [Format = "MMM", Culture = "en-US"]), _, x{0}, x{1}})(((z)=> {Date.StartOfWeek(z,1), Date.EndOfWeek(z,1)}) 
C = Table.Combine(Table.Group(B, A{0}, {"x", (x)=> Table.SelectColumns(Table.AddColumn(x, A{1}, each Table.PositionOf(x,_)+1), A)})[x])
] [C]) (2025)
                    
                  
Power Query solution 6 for Create 2025 Broadcast Calendar, proposed by Maciej Kopczyński:
let
 startDate = hashtag#date(2024, 12, 30),
 monthNames = List.Transform({1..12}, each Text.Start(Text.From(Date.MonthName(Date.From(Text.From(_) & "." & "2025"), "en-US")), 3)),
 monthSundayN = List.Transform({1..12}, each List.Count(List.Select(List.Dates(hashtag#date(2025, _, 1), Date.DaysInMonth(hashtag#date(2205, _, 1)), hashtag#duration(1, 0, 0, 0)), each Date.DayOfWeek(_, Day.Monday) = 6))),
 monthSeq = List.Transform(monthSundayN, each {1.._}),
 A = Table.FromColumns({monthNames, monthSeq}, {"Month", "Month Week"}),
 B = Table.ExpandListColumn(A, "Month Week"),
 C = Table.AddIndexColumn(B, "Year Week", 1, 1, Int64.Type),
 D = Table.AddColumn(C, "From Date", each Date.AddDays(startDate,([Year Week] - 1) * 7)),
 E = Table.AddColumn(D, "To Date", each Date.AddDays(startDate, 7 * [Year Week] - 1))

in
 E


                    
                  
          
Power Query solution 7 for Create 2025 Broadcast Calendar, proposed by Aleksandar Kovacevic:
let
 C = "en-US",
 F = [Format = "dd-MMM-yy"],
 Tbl = 
 Table.ExpandRecordColumn(
 Table.AddColumn(
 Table.FromList( List.Dates( hashtag#date( 2025, 1, 1 ), 365, Duration.From( 1 ) ), Splitter.SplitByNothing() , {"A"} ),
 "B", each 
 [
 WY = Date.WeekOfYear( [A]),
 Month Week = Date.WeekOfMonth( [A] ),
 WS = Date.StartOfWeek( [A], 1 ),
 WE = Date.EndOfWeek( [A], 1 ),
 Month = Text.Start( Date.MonthName( [A], C ), 3 )
 ]
 ),
 "B", { "Month Week", "WY", "WS", "WE", "Month" }
 ),
 Res = 
 Table.Group(
 Table.SelectRows( Tbl, each Text.Start(Date.MonthName( [WE], C ), 3 ) = [Month] ),
 { "Month", "Month Week" },
 {
 { "Year Week", each _[WY]{0} },
 { "From Date", each Date.ToText( _[WS]{0}, F, C ) },
 { "To Date", each Date.ToText( _[WE]{0}, F, C ) }
 }
 )
in
 Res


                    
                  
          

Solving the challenge of Create 2025 Broadcast Calendar with Excel

Excel solution 1 for Create 2025 Broadcast Calendar, proposed by Bo Rydobon 🇹🇭:
=LET(a,"1/1",w,WEEKDAY(a,2),d,SEQUENCE(52+(w+(MONTH(a+59)=2))/6,,a-w+7,7),HSTACK(TEXT(d,"mmm"),ROUNDUP(DAY(d)/7,),(d-@d)/7+1,d-6,d))
Excel solution 2 for Create 2025 Broadcast Calendar, proposed by John V.:
=LET(s,ROW(1:52),i,45655+7*s,HSTACK(TEXT(i,"mmm"),-INT(-DAY(i)/7),s,i-6,i))
Excel solution 3 for Create 2025 Broadcast Calendar, proposed by 🇰🇷 Taeyong Shin:
=LET(s,"1-1",d,WORKDAY.INTL(s-WEEKDAY(s,2),SEQUENCE(NETWORKDAYS.INTL(s,EDATE(s,12)-1,"1111110")),"0111111")+6,w,WEEKNUM(d,2),HSTACK(TEXT(d,"mmm"),w-WEEKNUM(EOMONTH(d,-1)+1,2)+1,w,d-6,d))
Excel solution 4 for Create 2025 Broadcast Calendar, proposed by Alejandro Campos:
=LET(
 start,
     DATE(
         2024,
          12,
          30
     ),
    
 weeks,
     52,
    
 fromDates,
     SEQUENCE(
         weeks,
          ,
          start,
          7
     ),
    
 toDates,
     fromDates + 6,
    
 months,
     TEXT(
         fromDates,
          "b1mmm"
     ),
    
 yearWeeks,
     SEQUENCE(
         weeks
     ),
    
 monthWeeks,
     BYROW(
 fromDates,
    
 LAMBDA(d,
     SUM((TEXT(
         fromDates,
          "mmmm"
     ) = TEXT(
         d,
          "mmmm"
     )) * (fromDates <= d)))),
    
 HSTACK(
     months,
      monthWeeks,
      yearWeeks,
      fromDates,
      toDates
 ))
Excel solution 5 for Create 2025 Broadcast Calendar, proposed by Timothée BLIOT:
=LET(A,DATE(2024,12,30),B,SEQUENCE(52,,0,7),C,A+B+6,D,B/7+1,E,TEXT(C,"mmm"),HSTACK(E,MAP(D,LAMBDA(x,SUM(--(INDEX(E,x)=TAKE(E,x))))),D,A+B,C))
Excel solution 6 for Create 2025 Broadcast Calendar, proposed by Hussein SATOUR:
=LET(a,"1/2025",b,a-WEEKDAY(a,2)+1,c,b+366-WEEKDAY(b+366,2),d,SEQUENCE(c-b+1,,b),e,DROP(GROUPBY(ISOWEEKNUM(d),d,HSTACK(MIN,MAX),,0),1),
HSTACK(TEXT(INDEX(e,,3),"mmm"),ROUNDUP(DAY(INDEX(e,,3))/7,0),e))
Excel solution 7 for Create 2025 Broadcast Calendar, proposed by Oscar Mendez Roca Farell:
=LET(s,
    ROW(
        1:52
    ),
    i,
    "1-1",
    f,
    i-WEEKDAY(
        i,
        3
    )+(s-1)*7,
    t,
    f+6,
     HSTACK(TEXT(
         t,
         "b1mmm"
     ),
    INT((DAY(
        t
    )-1)/7)+1,
    s,
    f,
    t))
Excel solution 8 for Create 2025 Broadcast Calendar, proposed by Sunny Baggu:
=LET(
 _a,
     DATE(
         2025,
          1,
          1
     ),
    
 _s,
     _a + SEQUENCE(
         365,
          ,
          0
     ) - (WEEKDAY(
         _a
     ) - 2),
    
 _wd,
     WEEKDAY(
         --_s
     ),
    
 _e,
     FILTER(
         _s,
          _wd = 1
     ),
    
 _st,
     TAKE(
         FILTER(
             _s,
              _wd = 2
         ),
          ROWS(
              _e
          )
     ),
    
 _yw,
     WEEKNUM(
         --_e
     ) - 1,
    
 _m,
     TEXT(
         _e,
          "mmm"
     ),
    
 _mw,
     SCAN(
         
          0,
         
          VSTACK(
              1,
               N(
                   DROP(
                       _m,
                        1
                   ) = DROP(
                       _m,
                        -1
                   )
               )
          ),
         
          LAMBDA(
              a,
               v,
               IF(
                   v = 0,
                    1,
                    a + v
               )
          )
          
     ),
    
 HSTACK(
     _m,
      _mw,
      _yw,
      _st,
      _e
 )
)
Excel solution 9 for Create 2025 Broadcast Calendar, proposed by LEONARD OCHEA 🇷🇴:
=LET(S,SEQUENCE,i,"1/1"-S(7),n,S(52),t,7*n+MAX(IF(WEEKDAY(i)=2,i))-1,HSTACK(TEXT(t,"mmm"),INT((DAY(t)-1)/7)+1,n,t-6,t))
Excel solution 10 for Create 2025 Broadcast Calendar, proposed by Anshu Bantra:
=LET(
 jan_1_,
     DATE(
         2025,
          1,
          1
     ),
    
 start_,
     jan_1_ - (WEEKDAY(
         jan_1_,
          2
     ) - 1),
    
 from_,
     SEQUENCE(
         52,
          ,
          start_,
          7
     ),
    
 months_,
     TEXT(
         
          MAP(
              
               from_,
              
               LAMBDA(
                   x,
                   
                    FILTER(
                        
                         SEQUENCE(
                             ,
                              7,
                              x
                         ),
                        
                         DAY(
                             SEQUENCE(
                             ,
                              7,
                              x
                         )
                         ) = MIN(
                             DAY(
                             SEQUENCE(
                             ,
                              7,
                              x
                         )
                         )
                         )
                         
                    )
                    
               )
               
          ),
         
          "MMM"
          
     ),
    
 weeks_,
     SCAN(
         
          1,
         
          VSTACK(
              FALSE,
               DROP(
                   months_,
                    -1
               ) = DROP(
                   months_,
                    1
               )
          ),
         
          LAMBDA(
              a,
               v,
               IF(
                   NOT(
                       v
                   ),
                    1,
                    a + v
               )
          )
          
     ),
    
 VSTACK(
     
      {"Month",
      "Month Week",
      "Year Week",
      "From Date",
      "To Date"},
     
      HSTACK(
          months_,
           weeks_,
           SEQUENCE(
               COUNT(
                   weeks_
               )
           ),
           from_,
           from_ + 6
      )
      
 )
)
Excel solution 11 for Create 2025 Broadcast Calendar, proposed by Md. Zohurul Islam:
=LET(
    hdr,
    HSTACK(
        "Month",
        "Month Week",
        "Year Week",
        "From Date",
        "To Date"
    ),
    
    dt,
    DATE(
        2025,
        1,
        1
    ),
    sdt,
    dt-WEEKDAY(
        dt,
        3
    ),
    a,
    SEQUENCE(
        52,
        ,
        sdt,
        7
    ),
    b,
    a+6,
    m,
    TEXT(
        b,
        "mmm"
    ),
    
    n,
    DROP(
        REDUCE(
            "",
            UNIQUE(
                m
            ),
            LAMBDA(
                x,
                y,
                VSTACK(
                    x,
                    SEQUENCE(
                        COUNTA(
                            FILTER(
                                m,
                                m=y
                            )
                        )
                    )
                )
            )
        ),
        1
    ),
    
    z,
    VSTACK(
        hdr,
        HSTACK(
            m,
            n,
            SEQUENCE(
                52
            ),
            a,
            b
        )
    ),
    
    z
)
Excel solution 12 for Create 2025 Broadcast Calendar, proposed by Hamidi Hamid:
=LET(x,
    WORKDAY.INTL(
        SEQUENCE(
            366,
            ,
            "24/12/2024",
            1
        ),
        1,
        11,
        
    ),
    xu,
    UNIQUE(
        FILTER(
            x,
            WEEKDAY(
                x,
                2
            )=1
        )
    ),
    xd,
    xu+6,
    ns,
    SEQUENCE(
        ROWS(
            xu
        )
    ),
    nm,
    MONTH(
            xu
        )&"-"&INT(
        DAY(
            EOMONTH(
                xu,
                0
            )
        )/7
    ),
    p,
    MAP(nm,
    LAMBDA(a,
    SUM(N(--(nm=a))))),
    k,
    TEXTAFTER(
        UNIQUE(
            nm&"-"&p
        ),
        "-",
        -1
    )*1,
    s,
    TOCOL(
        DROP(
            REDUCE(
                0,
                k,
                LAMBDA(
                    a,
         &           b,
                    VSTACK(
                        a,
                        SEQUENCE(
                            ,
                            b
                        )
                    )
                )
            ),
            1
        ),
        3
    ),
    HSTACK(
        PROPER(
            TEXT(
                xu,
                "mmm"
            )
        ),
        s,
        ns,
        xu,
        xd
    ))
Excel solution 13 for Create 2025 Broadcast Calendar, proposed by Asheesh Pahwa:
=LET(d,DATE(2025,1,1),s,SEQUENCE(52,,d-WEEKDAY(d,2)+1,7),
c,s+6,t,TEXT(c,"mmm"),r,DROP(REDUCE("",UNIQUE(t),LAMBDA(x,y,VSTACK(x,SEQUENCE(ROWS(FILTER(t,t=y)))))),1),HSTACK(t,r,SEQUENCE(52),s,c))
Excel solution 14 for Create 2025 Broadcast Calendar, proposed by Mihai Radu O:
=REDUCE(
 A2:E2,
    
 SEQUENCE(
     12
 ),
    
 LAMBDA(x,
     y,
    
 LET(
 pz,
     DATE(
         2025,
          y,
          1
     ),
    
 uz,
     EOMONTH(
         pz,
          0
     ),
    
 nrwk,
     NETWORKDAYS.INTL(
         pz,
          uz,
          "1111110"
     ),
    
 mwk,
     SEQUENCE(
         nrwk
     ),
    
 td,
     (pz + (7 - WEEKDAY(
         pz
     ) + 1)) + (7 * (mwk - 1)),
    
 fd,
     td - 6,
    
 ywk,
     WEEKNUM(
         td,
          2
     ),
    
 mth,
     TEXT(
         td,
          "MMM"
     ),
    
 VSTACK(
     x,
      HSTACK(
          mth,
           mwk,
           ywk,
           fd,
           td
      )
 )
 )
 )
)
Excel solution 15 for Create 2025 Broadcast Calendar, proposed by Erdit Qendro:
=LET(st,"01/01/2025",eY,EOMONTH(st,11),
wE,LAMBDA(wE,a,IF((MAX(a)+7)>=eY,a,wE(wE,VSTACK(a,TAKE(a,-1)+7)))),
wkE,wE(wE,st+7-WEEKDAY(st,2)),wkS,wkE-6,
yWN,SEQUENCE(ROWS(wkE)),
mN,TEXT(wkE,"mmm"),
wM,SCAN(0,mN=VSTACK("Jan",DROP(mN,-1)),LAMBDA(a,v,IF(v,a+1,1))),
HSTACK(mN,wM,yWN,wkS,wkE))
Excel solution 16 for Create 2025 Broadcast Calendar, proposed by LUIS FLORENTINO COUTO CORTEGOSO:
=LET(s,
    SEQUENCE(
        52
    ),
    f,
    DATEVALUE(
        "30/12/24"
    )+(s-1)*7,
    g,
    f+6,
    y,
    WEEKNUM(
        g-1
    ),
    m,
    TEXT(
        g,
        "mmm"
    ),
    w,
    s-XMATCH(
        m,
        m
    )+1,
    HSTACK(
        m,
        w,
        y,
        f,
        g
    ))
Excel solution 17 for Create 2025 Broadcast Calendar, proposed by Fredson Alves Pinho:
=MAKEARRAY(52,5,LAMBDA(r,c,CHOOSE(c,TEXT(DATE(2025,1,r*7-2),"mmm"),CEILING(DAY(DATE(2025,1,r*7-2))/7,1),r,DATE(2025,1,r*7-8),DATE(2025,1,r*7-2))))
Excel solution 18 for Create 2025 Broadcast Calendar, proposed by Craig Runciman:
=LET(ji,DATE(2025,1,1),dates,SEQUENCE(365,,ji),fm,"dd/mm/yyyy",filt,WEEKDAY(dates)=2,from,FILTER(dates,filt),to,from+6,
k,IF(WEEKDAY(ji)=2,HSTACK(from,to),VSTACK(HSTACK(@from-7,@to-7),HSTACK(from,to))),p,FILTER(k,YEAR(INDEX(k,,2))=2025),arr,MONTH(INDEX(p,,2)),
mw,REDUCE("",INDEX(GROUPBY(arr,arr,COUNT,,0),,2),LAMBDA(a,v,LET(s,VSTACK(a,SEQUENCE(v)),FILTER(s,s<>"")))),m,TEXT(INDEX(p,,2),"mmm"),HSTACK(m,mw,SEQUENCE(ROWS(arr)),TEXT(p,fm)))

Solving the challenge of Create 2025 Broadcast Calendar with Python

Python solution 1 for Create 2025 Broadcast Calendar, proposed by Konrad Gryczan, PhD:
import pandas as pd
from datetime import datetime, timedelta
def monday_of_isoweek(year, week):
 return datetime(year, 1, 4) + timedelta(days=(week - 1) * 7 - (datetime(year, 1, 4).weekday()))
data = [{
 "From": monday_of_isoweek(2025, week),
 "To": monday_of_isoweek(2025, week) + timedelta(days=6),
 "Week": week
} for week in range(1, 53)]
df = pd.DataFrame(data)
df['Month'] = df['To'].dt.strftime('%b')
df['Month Week'] = df.groupby('Month').cumcount() + 1
df['From'] = df['From'].dt.strftime('%Y-%m-%d')
df['To'] = df['To'].dt.strftime('%Y-%m-%d')
result = df[['Month', 'Month Week', 'Week', 'From', 'To']].rename(columns={
 'Month Week': 'Month Week',
 'Week': 'Year Week',
 'From': 'From Date',
 'To': 'To Date'
})
print(result)
                    
                  
Python solution 2 for Create 2025 Broadcast Calendar, proposed by Alejandro Campos:
import calendar as c
from datetime import datetime as d, timedelta as t
def gen_bc(y):
 s, wn, bc = d(y-1,12,30), 1, []
 for m in range(1,13):
 n = c.month_name[m]
 while s.month == m or (m == 1 and s.month == 12):
 e = s + t(days=6)
 bc.append({
 "Month": n,
 "Month Week": len([x for x in bc if x["Month"] == n]) + 1,
 "Year Week": wn,
 "From Date": s.strftime("%d-%b-%y"),
 "To Date": e.strftime("%d-%b-%y")
 })
 wn += 1
 s = e + t(days=1)
 return pd.DataFrame(bc)
broadcast_calendar_df = gen_bc(2025)
                    
                  
Python solution 3 for Create 2025 Broadcast Calendar, proposed by Anshu Bantra:
from datetime import datetime, timedelta
def generate_weekly_calendar(year):
 start_date = datetime(year, 1, 1)
 
 start_date -= timedelta(days=start_date.weekday())
 end_date = datetime(year, 12, 31)
 weeks = []
 current_date = start_date
 year_week = 1
 while current_date <= end_date:
 from_date = current_date
 to_date = from_date + timedelta(days=6)
 month = from_date.strftime('%b') if from_date.day < to_date.day
 else to_date.strftime('%b')
 month_start = datetime(from_date.year, from_date.month, 1)
 first_week_start = month_start - timedelta(days=month_start.weekday())
 month_week = ((from_date - first_week_start).days // 7) + 1
 weeks.append({
 'Month': month,
 'Month Week': month_week,
 'Year Week': year_week,
 'From Date': from_date.strftime('%d-%b-%y'),
 'To Date': to_date.strftime('%d-%b-%y')
 })
 current_date += timedelta(days=7)
 year_week += 1
 return pd.DataFrame(weeks)
generate_weekly_calendar(2025)
                    
                  

Solving the challenge of Create 2025 Broadcast Calendar with Python in Excel

Python in Excel solution 1 for Create 2025 Broadcast Calendar, proposed by Aditya Kumar Darak 🇮🇳:
from datetime import datetime, timedelta
Y = 2025
mon0 = datetime(Y, 1, 1) - timedelta(days=datetime(Y, 1, 1).weekday())
sunN = datetime(Y, 12, 31) - timedelta(days=(datetime(Y, 12, 31).weekday() + 1) % 7)
rng = pd.date_range(mon0, sunN, freq="W-MON")
wks = [(d, d + timedelta(days=6)) for d in rng]
bms = [
 next((x.month for x in pd.date_range(s, e) if x.day == 1 and x.year == Y), e.month)
 for s, e in wks
]
mws, cnt = [], {}
for m in bms:
 cnt[m] = cnt.get(m, 0) + 1
 mws.append(cnt[m])
df = pd.DataFrame(
 {
 "Mon": [datetime(Y, m, 1).strftime("%b") for m in bms],
 "MW": mws,
 "YW": range(1, len(wks) + 1),
 "From": [s.strftime("%d-%b-%y") for s, _ in wks],
 "To": [e.strftime("%d-%b-%y") for _, e in wks],
 }
)
                    
                  

Solving the challenge of Create 2025 Broadcast Calendar with R

R solution 1 for Create 2025 Broadcast Calendar, proposed by Konrad Gryczan, PhD:
library(tidyverse)
library(readxl)
path = "Excel/695 Broadcast Calendar.xlsx"
test = read_excel(path, range = "A2:E54")
monday_of_isoweek <- function(year, week) {
 ISOdate(year, 1, 4) +
 weeks(week - 1) -
 days(wday(ISOdate(year, 1, 4), week_start = 1) - 1)
}
result = data.frame(
 From = monday_of_isoweek(2025, 1:52),
 To = monday_of_isoweek(2025, 1:52) + days(6),
 Week = 1:52
) %>%
 mutate(Month = month(To, label = TRUE, abbr = TRUE, locale = "en")) %>%
 mutate(month_week = row_number(), .by = Month) %>%
 mutate(From = format(From, "%Y-%m-%d"), To = format(To, "%Y-%m-%d")) %>%
 select(
 Month,
 `Month Week` = month_week,
 `Year Week` = Week,
 `From Date` = From,
 `To Date` = To
 )
                    
                  

&&

Leave a Reply