In[]:=
Needs["PeterBurbery`DateTime`"]
Compute the week date for today:
In[]:=
ISOWeekDate[]
Out[]=
2022-W52-6
This is verified the Wikipedia article for ISO week date:
Compute the week date for my birthday:
In[]:=
$Birthdate=DateObject
Mon 18 Feb 2002 23:45:45GMT-5
,DateFormat->"DateTime",TimeZone->
Huntington
CITY

Out[]=
Monday 18 February 2002 23:45:45EST
In[]:=
ISOWeekDate[$Birthdate]
Out[]=
2002-W8-1
The ISO Week day uses 1 for Monday, 2 for Tuesday, 3 for Wednesday, 4 for Thursday, 5 for Friday, 6 for Saturday, and 7 for Sunday. In this system, Thursday is the middle day of the week, not Wednesday, which you would have when 1 is for Sunday, 2 is for Monday, 3 is for Tuesday, 4 is Wednesday, 5 is for Thursday, 6 is for Friday, and 7 is for Saturday.
Find the date a week from now:
In[]:=
Today+
1
wk
Out[]=
Sat 7 Jan 2023
Find the days between now and then:
In[]:=
DayRange[Now,Today+
1
wk
]
Out[]=

Sat 31 Dec 2022
,
Sun 1 Jan 2023
,
Mon 2 Jan 2023
,
Tue 3 Jan 2023
,
Wed 4 Jan 2023
,
Thu 5 Jan 2023
,
Fri 6 Jan 2023
,
Sat 7 Jan 2023

Find the ISO week days:
In[]:=
ISOWeekDate/@DayRange[Now,Today+
1
wk
]
Out[]=
{2022-W52-6,2023-W52-7,2023-W1-1,2023-W1-2,2023-W1-3,2023-W1-4,2023-W1-5,2023-W1-6}
In[]:=
AssociationMap[ISOWeekDate][DayRange[Now,Today+
1
wk
]]
Out[]=

Sat 31 Dec 2022
2022-W52-6,
Sun 1 Jan 2023
2023-W52-7,
Mon 2 Jan 2023
2023-W1-1,
Tue 3 Jan 2023
2023-W1-2,
Wed 4 Jan 2023
2023-W1-3,
Thu 5 Jan 2023
2023-W1-4,
Fri 6 Jan 2023
2023-W1-5,
Sat 7 Jan 2023
2023-W1-6
In[]:=
Dataset[AssociationMap[ISOWeekDate][DayRange[Now,Today+
1
wk
]]]
Out[]=
Sat 31 Dec 2022
2022-W52-6
Sun 1 Jan 2023
2023-W52-7
Mon 2 Jan 2023
2023-W1-1
Tue 3 Jan 2023
2023-W1-2
Wed 4 Jan 2023
2023-W1-3
Thu 5 Jan 2023
2023-W1-4
Fri 6 Jan 2023
2023-W1-5
Sat 7 Jan 2023
2023-W1-6
This means today is not New Years Eve. The last day of the year is Sunday 1 January 2023, not Saturday 1 January 2023. This means that New Years Eve is tomorrow and New Years Day is two days from now on Monday 2 January 2023.
Verify the days correspond to the right numbers:
In[]:=
AssociationMap[ISOWeekDate][DayRange[Now,Today+
1
wk
]]
Out[]=

Sat 31 Dec 2022
2022-W52-6,
Sun 1 Jan 2023
2023-W52-7,
Mon 2 Jan 2023
2023-W1-1,
Tue 3 Jan 2023
2023-W1-2,
Wed 4 Jan 2023
2023-W1-3,
Thu 5 Jan 2023
2023-W1-4,
Fri 6 Jan 2023
2023-W1-5,
Sat 7 Jan 2023
2023-W1-6
In[]:=
FromISOTimestamp/@AssociationMap[ISOWeekDate][DayRange[Now,Today+
1
wk
]]
Out[]=

Sat 31 Dec 2022

Sat 31 Dec 2022
,
Sun 1 Jan 2023

Sun 31 Dec 2023
,
Mon 2 Jan 2023
Failure

Message:
The string "2023-W1-1 is not a valid ISO 8601 date/time string.
Tag:
ParseFailure
Input:
2023-W1-1
,
Tue 3 Jan 2023
Failure

Message:
The string "2023-W1-2 is not a valid ISO 8601 date/time string.
Tag:
ParseFailure
Input:
2023-W1-2
,
Wed 4 Jan 2023
Failure

Message:
The string "2023-W1-3 is not a valid ISO 8601 date/time string.
Tag:
ParseFailure
Input:
2023-W1-3
,
Thu 5 Jan 2023
Failure

Message:
The string "2023-W1-4 is not a valid ISO 8601 date/time string.
Tag:
ParseFailure
Input:
2023-W1-4
,
Fri 6 Jan 2023
Failure

Message:
The string "2023-W1-5 is not a valid ISO 8601 date/time string.
Tag:
ParseFailure
Input:
2023-W1-5
,
Sat 7 Jan 2023
Failure

Message:
The string "2023-W1-6 is not a valid ISO 8601 date/time string.
Tag:
ParseFailure
Input:
2023-W1-6

Whoops. I need to add a 0 for something like 2023-W01-4 instead of 2023-W1-4.
In[]:=
FromISOTimestamp["2023-W01-4"]
Out[]=
Thu 5 Jan 2023
I will reprogram the function ISOWeekDay
In[]:=
globalISOWeekDate//ClearAll​​SetAttributes[globalISOWeekDate,{Listable}]​​​​globalISOWeekDate[date_?DateObjectQ]:=​​StringTemplate["<* DateValue[#1,\"Year\"] *>-W<* DateValue[#1,\"ISOWeek\",String] *>-<* DateValue[#1,\"ISOWeekDay\"] *>"​​][date]​​​​globalISOWeekDate[]:=​​ISOWeekDate[Now]
In[]:=
globalISOWeekDate[DayRange[Now,Today+
1
wk
]]
Out[]=
{2022-W52-6,2023-W52-7,2023-W01-1,2023-W01-2,2023-W01-3,2023-W01-4,2023-W01-5,2023-W01-6}
In[]:=
DateValue
Thu 5 Jan 2023
,"ISOWeekDay"
Out[]=
4
In[]:=
DateValue
Thu 5 Jan 2023
,"ISOWeekDay",Integer
Out[]=
4
In[]:=
DateValue
Thu 5 Jan 2023
,"ISOWeek",Integer
Out[]=
1
In[]:=
DateValue
Thu 5 Jan 2023
,"ISOWeek",String
Out[]=
01
In[]:=
DateValue
Thu 5 Jan 2023
,"ISOWeek",String//InputForm
Out[]//InputForm=
01
Verify again:
In[]:=
FromISOTimestamp/@AssociationMap[globalISOWeekDate][DayRange[Now,Today+
1
wk
]]
Out[]=

Sat 31 Dec 2022

Sat 31 Dec 2022
,
Sun 1 Jan 2023

Sun 31 Dec 2023
,
Mon 2 Jan 2023

Mon 2 Jan 2023
,
Tue 3 Jan 2023

Tue 3 Jan 2023
,
Wed 4 Jan 2023

Wed 4 Jan 2023
,
Thu 5 Jan 2023

Thu 5 Jan 2023
,
Fri 6 Jan 2023

Fri 6 Jan 2023
,
Sat 7 Jan 2023

Sat 7 Jan 2023

Good.
Compute the day too:
In[]:=
DayName/@FromISOTimestamp/@AssociationMap[globalISOWeekDate][DayRange[Now,Today+
1
wk
]]
Out[]=

Sat 31 Dec 2022
Saturday,
Sun 1 Jan 2023
Sunday,
Mon 2 Jan 2023
Monday,
Tue 3 Jan 2023
Tuesday,
Wed 4 Jan 2023
Wednesday,
Thu 5 Jan 2023
Thursday,
Fri 6 Jan 2023
Friday,
Sat 7 Jan 2023
Saturday
Make a dataset and association for the ISO convention:
In[]:=
NextDate[Monday]
Out[]=
Mon 2 Jan 2023
This is the other convention:
Verify that the ISO week date is always right