6 #include "ZoneProcessor.h"
11 MonthDay calcStartDayOfMonth(int16_t year, uint8_t month,
12 uint8_t onDayOfWeek, int8_t onDayOfMonth) {
13 if (onDayOfWeek == 0)
return {month, (uint8_t) onDayOfMonth};
15 if (onDayOfMonth >= 0) {
18 if (onDayOfMonth == 0) {
19 onDayOfMonth = daysInMonth - 6;
23 uint8_t dayOfWeekShift = (onDayOfWeek - limitDate.dayOfWeek() + 7) % 7;
24 uint8_t day = (uint8_t) (onDayOfMonth + dayOfWeekShift);
25 if (day > daysInMonth) {
32 onDayOfMonth = -onDayOfMonth;
34 int8_t dayOfWeekShift = (limitDate.dayOfWeek() - onDayOfWeek + 7) % 7;
35 int8_t day = onDayOfMonth - dayOfWeekShift;
40 day += daysInPrevMonth;
42 return {month, (uint8_t) day};
static LocalDate forComponents(int16_t year, uint8_t month, uint8_t day)
Factory method using separated year, month and day fields.
static uint8_t daysInMonth(int16_t year, uint8_t month)
Return the number of days in the current month.