std::chrono::operator+, std::chrono::operator- (std::chrono::year_month)

From cppreference.com
< cpp‎ | chrono‎ | year month
Date and time library
Time point
(C++11)
(C++20)
Duration
(C++11)
Clocks
(C++11)
(C++11)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
Time of day
(C++20)(C++20)
(C++20)(C++20)
(C++20)

Calendar
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)(C++20)
Time zone
(C++20)
(C++20)
(C++20) (C++20) (C++20) (C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
chrono I/O
(C++20)
C-style date and time
constexpr std::chrono::year_month operator+ ( const std::chrono::year_month & ym,
const std::chrono::years & dy ) noexcept ;
(1) (since C++20)
constexpr std::chrono::year_month operator+ ( const std::chrono::years & dy,
const std::chrono::year_month & ym ) noexcept ;
(2) (since C++20)
constexpr std::chrono::year_month operator+ ( const std::chrono::year_month & ym,
const std::chrono::months & dm ) noexcept ;
(3) (since C++20)
constexpr std::chrono::year_month operator+ ( const std::chrono::months & dm,
const std::chrono::year_month & ym ) noexcept ;
(4) (since C++20)
constexpr std::chrono::year_month operator- ( const std::chrono::year_month & ym,
const std::chrono::years & dy ) noexcept ;
(5) (since C++20)
constexpr std::chrono::year_month operator- ( const std::chrono::year_month & ym,
const std::chrono::months & dm ) noexcept ;
(6) (since C++20)
constexpr std::chrono::months operator- ( const std::chrono::year_month & ym1,
const std::chrono::year_month & ym2 ) noexcept ;
(7) (since C++20)
1,2) Adds dy.count() years to ym
3,4) Adds dm.count() months to ym
5) Subtracts dy.count() years from ym
6) Subtracts dm.count() months from ym
7) Returns the difference in months between the two time points represented by ym1 and ym2

For durations that are convertible to both std::chrono::years and std::chrono::months, the years overloads (1,2,5)

Return value

1,2) std::chrono::year_month (ym.year ( ) + dy, ym.month ( ) )
3,4) A year_month value z such that z - ym == dm and z.ok() == true
5) ym + -dy
6) ym + -dm
7)
ym1.year ( ) - ym2.year ( ) + std::chrono::months ( int ( unsigned (ym1.month ( ) ) ) -
int ( unsigned (ym2.month ( ) ) ) )

Notes

The result of subtracting two year_month values is a duration of type std::chrono::months 2017y/3 - 2017y/2 is std::chrono::months ( 1 )

Example

#include <cassert>
#include <chrono>
 
int main()
{
    auto ym{std::chrono::year(2021)/std::chrono::July};
 
    ym = ym + std::chrono::months(14);
    assert(ym.month() == std::chrono::September);
    assert(ym.year() == std::chrono::year(2022));
 
    ym = ym - std::chrono::years(3);
    assert(ym.month() == std::chrono::month(9));
    assert(ym.year() == std::chrono::year(2019));
 
    ym = ym + (std::chrono::September - std::chrono::month(2));
    assert(ym.month() == std::chrono::April);
    assert(ym.year() == std::chrono::year(2020));
}

See also

modifies the year_month by some number of months or years
(public member function)