finding_20the_20iso_20week_20number
This is an old revision of the document!
Finding the ISO week number
by Richard Russell, November 2015
The code listed below finds the ISO week number (or year and week) corresponding to a given date:
INSTALL @lib$+"DATELIB"
PRINT FN_ISOweek(1,1,2005) PRINT FN_ISOweek(2,1,2005) PRINT FN_ISOweek(31,12,2005) PRINT FN_ISOweek(31,12,2006) PRINT FN_ISOweek(1,1,2007) PRINT FN_ISOweek(30,12,2007) PRINT FN_ISOweek(31,12,2007) PRINT FN_ISOweek(1,1,2008) PRINT FN_ISOweek(28,12,2008) PRINT FN_ISOweek(29,12,2008) PRINT FN_ISOweek(30,12,2008) PRINT FN_ISOweek(31,12,2008) PRINT FN_ISOweek(1,1,2009) PRINT FN_ISOweek(31,12,2009) PRINT FN_ISOweek(1,1,2010) PRINT FN_ISOweek(2,1,2010) PRINT FN_ISOweek(3,1,2010)
REM FOR d% = 1 TO 30 REM PRINT d%, FN_ISOweek(d%,11,2015) REM NEXT END
DEF FN_ISOweek(day%,month%,year%) LOCAL iyr%, mjd% iyr% = year% mjd% = FN_mjd(day%,month%,iyr%) IF mjd% >= FN_ISOwk1(iyr%+1) THEN iyr% += 1 IF mjd% < FN_ISOwk1(iyr%) THEN iyr% -= 1 = (mjd% - FN_ISOwk1(iyr%)) DIV 7 + 1
DEF FN_ISOwk1(year%) LOCAL dow%, mjd% mjd% = FN_mjd(4,1,year%) dow% = FN_dow(mjd%) IF dow% = 0 dow% = 7 = mjd% - dow% + 1
If you want to know the ISO year as well as the week, you can return it in an additional parameter:
DEF FN_ISOweek(day%,month%,year%,RETURN iyr%) LOCAL mjd% ... remainder as above
finding_20the_20iso_20week_20number.1522502360.txt.gz · Last modified: 2024/01/05 00:17 (external edit)