I’m trying to properly sort out how to get ISO week numbers and ranges without dropping down to Java.
The correct data I’m trying to get is best demonstrated here: Week Numbers for 2021
So a week starts on a Monday.
// Week 38 September 20, 2021 - September 26, 2021
// A Sunday
aSunday = createDate(2021, 09, 26);
// Result is 40, should be 38
dump(week(aSunday));
// Result is 1, should be 7
dump(DayOfWeek( aSunday ));
// returns 38 - yay!
dump(getISOWeek(aSunday));
// returns 7 - yay!
dump(ISODayOfWeek(aSunday));
public function ISODayOfWeek(date seeddate = now()){
return ( ( ( DayOfWeek( ARGUMENTS.seeddate ) + (7 - 2) ) MOD 7 ) + 1 );
}
public function getISOWeek(date seeddate = now()){
var date = CreateObject("java","java.util.Calendar").getInstance();
date.set(year(seeddate), month(seeddate) -1, day(seeddate));
date.setFirstDayOfWeek(date.MONDAY);
date.setMinimalDaysInFirstWeek(4);
return date.get(date.WEEK_OF_YEAR);
}
I guess my question is, is there a better way to do this in Lucee with built in functions? (I also need to be able to give a function a year and week and return the date range that it satisifies, but thought I’d start here…)
Cheers!