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

From cppreference.com
< cpp‎ | chrono‎ | 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
Defined in header <chrono>
constexpr std::chrono::month operator+ ( const std::chrono::month & m,
const std::chrono::months & ms ) noexcept ;
(1) (since C++20)
constexpr std::chrono::month operator+ ( const std::chrono::months & ms,
const std::chrono::month & m ) noexcept ;
(2) (since C++20)
constexpr std::chrono::month operator- ( const std::chrono::month & m,
const std::chrono::months & ms ) noexcept ;
(3) (since C++20)
constexpr std::chrono::months operator- ( const std::chrono::month & m1,
const std::chrono::month & m2 ) noexcept ;
(4) (since C++20)
1,2) Adds ms.count() months to m. The month value held in the result is computed by first evaluating static_cast < long long > ( unsigned (m) ) + (ms.count ( ) - 1 ) , reducing it modulo 12 to an integer in the range [ 0 11 ]
3) Subtracts ms.count() months from m and returns the result. Equivalent to return m + -ms;
4) If m1.ok() and m2.ok() are both true, returns a std::chrono::months value m such that m.count() is in the range [ 0 11 ] and m2 + m == m1

Return value

1-3) A std::chrono::month holding a month value calculated as described above.
4) A std::chrono::months representing the distance between m1 and m2

Notes

As long as the computation doesn't overflow, (1-3) always return a valid month even if m.ok() is false

The result of subtracting two month values is a duration of type std::chrono::months std::chrono::seconds ( std::chrono::April - std::chrono::March ) is not the number of seconds in March (2678400s), but 2629746s

Example

#include <cassert>
#include <chrono>
 
int main()
{
    std::chrono::month m{6};
 
    m = m + std::chrono::months(2);
    assert(m == std::chrono::month(8));
 
    m = m - std::chrono::months(3);
    assert(m == std::chrono::month(5));
 
    constexpr std::chrono::months ms = std::chrono::month(8) - std::chrono::month(6);
    static_assert(ms == std::chrono::months(2));
}

See also

increments or decrements the month
(public member function)
adds or subtracts a number of months
(public member function)