#include <TimeLib.h>
// Функция для получения номера недели в месяце
int getWeekOfMonth() {
// Получаем текущую дату
int currentYear = year();
int currentMonth = month();
int currentDay = day();
// Создаем объект времени для первого дня месяца
tmElements_t tm;
tm.Year = currentYear - 1900; // Год в формате tm (с 1900)
tm.Month = currentMonth - 1; // Месяц в формате tm (0-11)
tm.Day = 1; // Первое число месяца
tm.Hour = 0;
tm.Minute = 0;
tm.Second = 0;
// Конвертируем в timestamp
time_t firstDayOfMonth = makeTime(tm);
// Получаем день недели для первого дня месяца (1 = Sunday, 2 = Monday, ..., 7 = Saturday)
int firstDayOfWeek = weekday(firstDayOfMonth);
// Переводим в формат: 1 = Monday, 2 = Tuesday, ..., 7 = Sunday
int firstDayMondayBased = (firstDayOfWeek == 1) ? 7 : firstDayOfWeek - 1;
// Вычисляем номер недели (начиная с 1)
int weekNumber = (currentDay + firstDayMondayBased - 2) / 7 + 1;
return weekNumber;
}
void setup() {
Serial.begin(9600);
Serial.println("Номер недели в месяце:");
// Установка времени для примера (раскомментируйте и измените на нужное)
setTime(12, 0, 0, 4, 8, 2025); // часы, минуты, секунды, день, месяц, год
Print();
setTime(12, 0, 0, 10, 8, 2025); // часы, минуты, секунды, день, месяц, год
Print();
setTime(12, 0, 0, 18, 8, 2025); // часы, минуты, секунды, день, месяц, год
Print();
setTime(12, 0, 0, 24, 8, 2025); // часы, минуты, секунды, день, месяц, год
Print();
setTime(12, 0, 0, 7, 9, 2025); // часы, минуты, секунды, день, месяц, год
Print();
setTime(12, 0, 0, 8, 9, 2025); // часы, минуты, секунды, день, месяц, год
Print();
setTime(12, 0, 0, 28, 9, 2025); // часы, минуты, секунды, день, месяц, год
Print();
setTime(12, 0, 0, 29, 9, 2025); // часы, минуты, секунды, день, месяц, год
Print();
}
void loop() {}
void Print() {
// Выводим информацию
Serial.print("Дата: ");
Serial.print(day());
Serial.print(".");
Serial.print(month());
Serial.print(".");
Serial.print(year());
Serial.print(" - Неделя месяца: ");
Serial.println(getWeekOfMonth());
}