How to get the date of the last Friday of month of given year and month in C++

1 Answer

0 votes
#include <chrono>
#include <iostream>

std::chrono::year_month_day last_friday_of_month(int y, unsigned m) {
    using namespace std::chrono;

    // Build year_month correctly
    year_month ym{year{y}, month{m}};

    // First day of next month: (ym + 1 month) / day{1}
    year_month_day first_next = (ym + months{1}) / day{1};

    // Last day of this month
    sys_days last_day = sys_days{first_next} - days{1};

    // Walk backward to Friday
    while (weekday{last_day} != Friday) {
        last_day -= days{1};
    }

    return year_month_day{last_day};
}

int main() {
    auto d = last_friday_of_month(2026, 5);
    
    std::cout << (int)d.year() << "-"
              << (unsigned)d.month() << "-"
              << (unsigned)d.day() << "\n";

              
    d = last_friday_of_month(2026, 6);
    
    std::cout << (int)d.year() << "-"
              << (unsigned)d.month() << "-"
              << (unsigned)d.day() << "\n";
}



/*
run:

2026-5-29
2026-6-26

*/

 



answered May 23 by avibootz
...