41using years = std::chrono::duration
198template<class CharT, class Traits>
199std::basic_ostream<CharT, Traits>&
200operator<<(std::basic_ostream<CharT, Traits>& os, const
day& d);
235template<class CharT, class Traits>
236std::basic_ostream<CharT, Traits>&
237operator<<(std::basic_ostream<CharT, Traits>& os, const
month& m);
277template<class CharT, class Traits>
278std::basic_ostream<CharT, Traits>&
279operator<<(std::basic_ostream<CharT, Traits>& os, const
year& y);
318template<class CharT, class Traits>
319std::basic_ostream<CharT, Traits>&
320operator<<(std::basic_ostream<CharT, Traits>& os, const
weekday& wd);
340template<class CharT, class Traits>
341std::basic_ostream<CharT, Traits>&
342operator<<(std::basic_ostream<CharT, Traits>& os, const
weekday_indexed& wdi);
360template<class CharT, class Traits>
361std::basic_ostream<CharT, Traits>&
362operator<<(std::basic_ostream<CharT, Traits>& os, const
weekday_last& wdl);
401template<class CharT, class Traits>
402std::basic_ostream<CharT, Traits>&
403operator<<(std::basic_ostream<CharT, Traits>& os, const
year_month& ym);
428template<class CharT, class Traits>
429std::basic_ostream<CharT, Traits>&
430operator<<(std::basic_ostream<CharT, Traits>& os, const
month_day& md);
452template<class CharT, class Traits>
453std::basic_ostream<CharT, Traits>&
454operator<<(std::basic_ostream<CharT, Traits>& os, const
month_day_last& mdl);
475template<class CharT, class Traits>
476std::basic_ostream<CharT, Traits>&
477operator<<(std::basic_ostream<CharT, Traits>& os, const
month_weekday& mwd);
501template<class CharT, class Traits>
502std::basic_ostream<CharT, Traits>&
553template<class CharT, class Traits>
554std::basic_ostream<CharT, Traits>&
555operator<<(std::basic_ostream<CharT, Traits>& os, const
year_month_day& ymd);
620template<class CharT, class Traits>
621std::basic_ostream<CharT, Traits>&
687template<class CharT, class Traits>
688std::basic_ostream<CharT, Traits>&
753template<class CharT, class Traits>
754std::basic_ostream<CharT, Traits>&
757#if !defined(_MSC_VER) || (_MSC_VER >= 1900)
758inline namespace literals
788 return static_cast<unsigned>(x) ==
static_cast<unsigned>(y);
804 return static_cast<unsigned>(x) <
static_cast<unsigned>(y);
836 return days{
static_cast<days::rep
>(
static_cast<unsigned>(x)
837 -
static_cast<unsigned>(y))};
845 return day{
static_cast<unsigned>(x) +
static_cast<unsigned>(y.count())};
864template<
class CharT,
class Traits>
866std::basic_ostream<CharT, Traits>&
867operator<<(std::basic_ostream<CharT, Traits>& os,
const day& d)
873 os << static_cast<unsigned>(d);
911 return static_cast<unsigned>(x) ==
static_cast<unsigned>(y);
927 return static_cast<unsigned>(x) <
static_cast<unsigned>(y);
959 auto const d =
static_cast<unsigned>(x) -
static_cast<unsigned>(y);
960 return months(d <= 11 ? d : d + 12);
968 auto const mu =
static_cast<long long>(
static_cast<unsigned>(x)) - 1 + y.count();
969 auto const yr = (
mu >= 0 ?
mu :
mu-11) / 12;
970 return month{
static_cast<unsigned>(
mu - yr * 12 + 1)};
989template<
class CharT,
class Traits>
991std::basic_ostream<CharT, Traits>&
992operator<<(std::basic_ostream<CharT, Traits>& os,
const month& m)
994 switch (
static_cast<unsigned>(m))
1003 os <<
"Rabi' al-awwal";
1006 os <<
"Rabi' al-thani";
1009 os <<
"Jumada al-awwal";
1012 os <<
"Jumada al-Thani";
1027 os <<
"Dhu al-Qi'dah";
1030 os <<
"Dhu al-Hijjah";
1033 os << static_cast<unsigned>(m) <<
" is not a valid month";
1055 const int era = (y >= 0 ? y : y-29) / 30;
1056 const unsigned yoe =
static_cast<unsigned>(y - era * 30);
1100 return static_cast<int>(x) ==
static_cast<int>(y);
1116 return static_cast<int>(x) <
static_cast<int>(y);
1148 return years{
static_cast<int>(x) -
static_cast<int>(y)};
1156 return year{
static_cast<int>(x) + y.count()};
1172 return year{
static_cast<int>(x) - y.count()};
1175template<
class CharT,
class Traits>
1177std::basic_ostream<CharT, Traits>&
1178operator<<(std::basic_ostream<CharT, Traits>& os,
const year& y)
1183 os.width(4 + (y < year{0}));
1184 os << static_cast<int>(y);
1195 return static_cast<unsigned char>(
static_cast<unsigned>(
1196 z >= -4 ? (z+4) % 7 : (z+5) % 7 + 6));
1202 : wd_(
static_cast<decltype(wd_)
>(wd))
1208 : wd_(weekday_from_days(dp.time_since_epoch().count()))
1214 : wd_(weekday_from_days(dp.time_since_epoch().count()))
1244 return static_cast<unsigned>(wd_);
1254 return static_cast<unsigned>(x) ==
static_cast<unsigned>(y);
1270 auto const diff =
static_cast<unsigned>(x) -
static_cast<unsigned>(y);
1271 return days{diff <= 6 ? diff : diff + 7};
1279 auto const wdu =
static_cast<long long>(
static_cast<unsigned>(x)) + y.count();
1280 auto const wk = (wdu >= 0 ? wdu : wdu-6) / 7;
1281 return weekday{
static_cast<unsigned>(wdu - wk * 7)};
1300template<
class CharT,
class Traits>
1302std::basic_ostream<CharT, Traits>&
1303operator<<(std::basic_ostream<CharT, Traits>& os,
const weekday& wd)
1305 switch (
static_cast<unsigned>(wd))
1314 os <<
"ath-Thulāthā’";
1329 os << static_cast<unsigned>(wd) <<
" is not a valid weekday";
1335#if !defined(_MSC_VER) || (_MSC_VER >= 1900)
1336inline namespace literals
1358#if !defined(_MSC_VER) || (_MSC_VER >= 1900)
1379 return weekday().
ok() && 1 <= index_ && index_ <= 5;
1385 : wd_(
static_cast<decltype(wd_)
>(
static_cast<unsigned>(wd)))
1386 , index_(
static_cast<decltype(index_)
>(index))
1389template<
class CharT,
class Traits>
1391std::basic_ostream<CharT, Traits>&
1394 return os << wdi.
weekday() <<
'[' << wdi.
index() <<
']';
1402 return {*
this, index};
1410 return x.weekday() == y.weekday() && x.index() == y.index();
1432 return x.weekday() == y.weekday();
1443template<
class CharT,
class Traits>
1445std::basic_ostream<CharT, Traits>&
1446operator<<(std::basic_ostream<CharT, Traits>& os,
const weekday_last& wdl)
1448 return os << wdl.weekday() <<
"[last]";
1513 return x.year() == y.year() && x.month() == y.month();
1529 return x.year() < y.year() ? true
1530 : (x.year() > y.year() ? false
1531 : (x.month() < y.month()));
1563 auto dmi =
static_cast<int>(
static_cast<unsigned>(ym.month())) - 1 + dm.count();
1564 auto dy = (dmi >= 0 ? dmi : dmi-11) / 12;
1565 dmi = dmi - dy * 12 + 1;
1566 return (ym.year() +
years(dy)) /
month(
static_cast<unsigned>(dmi));
1590 return (x.year() - y.year()) +
1591 months(
static_cast<unsigned>(x.month()) -
static_cast<unsigned>(y.month()));
1599 return (ym.year() + dy) / ym.month();
1618template<
class CharT,
class Traits>
1620std::basic_ostream<CharT, Traits>&
1621operator<<(std::basic_ostream<CharT, Traits>& os,
const year_month& ym)
1623 return os << ym.year() <<
'/' << ym.month();
1644 {30_d, 29_d, 30_d, 29_d, 30_d, 29_d, 30_d, 29_d, 30_d, 29_d, 30_d, 30_d};
1645 return m_.
ok() && 1_d <= d_ && d_ <= d[static_cast<unsigned>(m_)-1];
1653 return x.month() == y.month() && x.day() == y.day();
1669 return x.month() < y.month() ? true
1670 : (x.month() > y.month() ? false
1671 : (x.day() < y.day()));
1698template<
class CharT,
class Traits>
1700std::basic_ostream<CharT, Traits>&
1701operator<<(std::basic_ostream<CharT, Traits>& os,
const month_day& md)
1703 return os << md.month() <<
'/' << md.day();
1717 return x.month() == y.month();
1733 return x.month() < y.month();
1760template<
class CharT,
class Traits>
1762std::basic_ostream<CharT, Traits>&
1763operator<<(std::basic_ostream<CharT, Traits>& os,
const month_day_last& mdl)
1765 return os << mdl.month() <<
"/last";
1793 return m_.
ok() && wdi_.
ok();
1801 return x.month() == y.month() && x.weekday_indexed() == y.weekday_indexed();
1812template<
class CharT,
class Traits>
1814std::basic_ostream<CharT, Traits>&
1815operator<<(std::basic_ostream<CharT, Traits>& os,
const month_weekday& mwd)
1817 return os << mwd.month() <<
'/' << mwd.weekday_indexed();
1845 return m_.
ok() && wdl_.
ok();
1853 return x.month() == y.month() && x.weekday_last() == y.weekday_last();
1864template<
class CharT,
class Traits>
1866std::basic_ostream<CharT, Traits>&
1867operator<<(std::basic_ostream<CharT, Traits>& os,
const month_weekday_last& mwdl)
1869 return os << mwdl.month() <<
'/' << mwdl.weekday_last();
1935 {30_d, 29_d, 30_d, 29_d, 30_d, 29_d, 30_d, 29_d, 30_d, 29_d, 30_d, 29_d};
1937 d[
static_cast<unsigned>(
month())-1] : 30_d;
1959 return y_.
ok() && mdl_.
ok();
1967 return x.year() == y.year() && x.month_day_last() == y.month_day_last();
1983 return x.year() < y.year() ? true
1984 : (x.year() > y.year() ? false
1985 : (x.month_day_last() < y.month_day_last()));
2012template<
class CharT,
class Traits>
2014std::basic_ostream<CharT, Traits>&
2015operator<<(std::basic_ostream<CharT, Traits>& os,
const year_month_day_last& ymdl)
2017 return os << ymdl.year() <<
'/' << ymdl.month_day_last();
2025 return (ymdl.year() / ymdl.month() + dm) /
last;
2041 return ymdl + (-dm);
2049 return {ymdl.year()+dy, ymdl.month_day_last()};
2065 return ymdl + (-dy);
2144 static_assert(std::numeric_limits<unsigned>::digits >= 18,
2145 "This algorithm has not been ported to a 16 bit unsigned integer");
2146 static_assert(std::numeric_limits<int>::digits >= 20,
2147 "This algorithm has not been ported to a 16 bit signed integer");
2148 auto const y =
static_cast<int>(y_) - 1;
2149 auto const m =
static_cast<unsigned>(m_);
2150 auto const d =
static_cast<unsigned>(
d_);
2151 auto const era = (y >= 0 ? y : y-29) / 30;
2152 auto const yoe =
static_cast<unsigned>(y - era * 30);
2153 auto const doy = 29*(m-1) + m/2 + d-1;
2154 auto const doe = yoe * 354 + (11*(yoe+1)+3)/30 + doy;
2155 return days{era * 10631 +
static_cast<int>(doe) - 492148};
2177 if (!(y_.
ok() && m_.
ok()))
2187 return x.year() == y.year() && x.month() == y.month() && x.day() == y.day();
2203 return x.year() < y.year() ? true
2204 : (x.year() > y.year() ? false
2205 : (x.month() < y.month() ? true
2206 : (x.month() > y.month() ? false
2207 : (x.day() < y.day()))));
2234template<
class CharT,
class Traits>
2236std::basic_ostream<CharT, Traits>&
2237operator<<(std::basic_ostream<CharT, Traits>& os,
const year_month_day& ymd)
2242 os << ymd.year() <<
'-';
2244 os << static_cast<unsigned>(ymd.month()) <<
'-';
2254 static_assert(std::numeric_limits<unsigned>::digits >= 18,
2255 "This algorithm has not been ported to a 16 bit unsigned integer");
2256 static_assert(std::numeric_limits<int>::digits >= 20,
2257 "This algorithm has not been ported to a 16 bit signed integer");
2258 auto const z = dp.count() + 492148;
2259 auto const era = (z >= 0 ? z : z - 10630) / 10631;
2260 auto const doe =
static_cast<unsigned>(z - era * 10631);
2261 auto const yoe = (30*doe + 10646)/10631 - 1;
2262 auto const y =
static_cast<sys_days::rep
>(yoe) + era * 30 + 1;
2263 auto const doy = doe - (yoe * 354 + (11*(yoe+1)+3)/30);
2264 auto const m = (11*doy + 330) / 325;
2265 auto const d = doy - (29*(m-1) + m/2) + 1;
2274 return (ymd.year() / ymd.month() + dm) / ymd.day();
2298 return (ymd.year() + dy) / ymd.month() / ymd.day();
2393 return wdi_.
index();
2425 if (wdi_.
index() <= 4)
2428 return static_cast<unsigned>(d2.count()) <=
static_cast<unsigned>((y_/m_/
last).day());
2439 return {ymd.year(), ymd.month(), wd[(
static_cast<unsigned>(ymd.day())-1)/7+1]};
2449 ).time_since_epoch();
2457 return x.year() == y.year() && x.month() == y.month() &&
2458 x.weekday_indexed() == y.weekday_indexed();
2469template<
class CharT,
class Traits>
2471std::basic_ostream<CharT, Traits>&
2472operator<<(std::basic_ostream<CharT, Traits>& os,
const year_month_weekday& ymwdi)
2474 return os << ymwdi.year() <<
'/' << ymwdi.month()
2475 <<
'/' << ymwdi.weekday_indexed();
2483 return (ymwd.year() / ymwd.month() + dm) / ymwd.weekday_indexed();
2499 return ymwd + (-dm);
2507 return {ymwd.year()+dy, ymwd.month(), ymwd.weekday_indexed()};
2523 return ymwd + (-dy);
2612 return y_.
ok() && m_.
ok() && wdl_.
ok();
2629 return x.year() == y.year() && x.month() == y.month() &&
2630 x.weekday_last() == y.weekday_last();
2641template<
class CharT,
class Traits>
2643std::basic_ostream<CharT, Traits>&
2644operator<<(std::basic_ostream<CharT, Traits>& os,
const year_month_weekday_last& ymwdl)
2646 return os << ymwdl.year() <<
'/' << ymwdl.month() <<
'/' << ymwdl.weekday_last();
2651year_month_weekday_last
2654 return (ymwdl.year() / ymwdl.month() + dm) / ymwdl.weekday_last();
2659year_month_weekday_last
2667year_month_weekday_last
2670 return ymwdl + (-dm);
2675year_month_weekday_last
2678 return {ymwdl.year()+dy, ymwdl.month(), ymwdl.weekday_last()};
2683year_month_weekday_last
2691year_month_weekday_last
2694 return ymwdl + (-dy);
2712 return y /
month(
static_cast<unsigned>(m));
2738 return m /
day(
static_cast<unsigned>(d));
2746 return month(
static_cast<unsigned>(m)) / d;
2774 return month(
static_cast<unsigned>(m))/
last;
2808 return month(
static_cast<unsigned>(m)) / wdi;
2842 return month(
static_cast<unsigned>(m)) / wdl;
2860 return {ym.year(), ym.month(), d};
2868 return ym /
day(
static_cast<unsigned>(d));
2876 return y / md.month() / md.day();
2884 return year(y) / md;
2900 return year(y) / md;
2926 return year(y) / mdl;
2942 return year(y) / mdl;
2952 return {ym.year(), ym.month(), wdi};
2960 return {y, mwd.month(), mwd.weekday_indexed()};
2968 return year(y) / mwd;
2984 return year(y) / mwd;
2991year_month_weekday_last
2994 return {ym.year(), ym.month(), wdl};
2999year_month_weekday_last
3002 return {y, mwdl.month(), mwdl.weekday_last()};
3007year_month_weekday_last
3010 return year(y) / mwdl;
3015year_month_weekday_last
3023year_month_weekday_last
3026 return year(y) / mwdl;
CONSTCD14 day & operator++() NOEXCEPT
CONSTCD14 day & operator-=(const days &d) NOEXCEPT
CONSTCD11 day(unsigned d) NOEXCEPT
CONSTCD14 day & operator--() NOEXCEPT
CONSTCD11 bool ok() const NOEXCEPT
CONSTCD14 day & operator+=(const days &d) NOEXCEPT
CONSTCD11 islamic::month month() const NOEXCEPT
CONSTCD11 bool ok() const NOEXCEPT
CONSTCD11 month_day_last(const islamic::month &m) NOEXCEPT
CONSTCD11 month_day(const islamic::month &m, const islamic::day &d) NOEXCEPT
CONSTCD11 islamic::month month() const NOEXCEPT
CONSTCD14 bool ok() const NOEXCEPT
CONSTCD11 islamic::day day() const NOEXCEPT
islamic::weekday_last wdl_
CONSTCD11 month_weekday_last(const islamic::month &m, const islamic::weekday_last &wd) NOEXCEPT
CONSTCD11 bool ok() const NOEXCEPT
CONSTCD11 islamic::weekday_last weekday_last() const NOEXCEPT
CONSTCD11 islamic::month month() const NOEXCEPT
CONSTCD11 month_weekday(const islamic::month &m, const islamic::weekday_indexed &wdi) NOEXCEPT
CONSTCD11 islamic::month month() const NOEXCEPT
CONSTCD11 bool ok() const NOEXCEPT
islamic::weekday_indexed wdi_
CONSTCD11 islamic::weekday_indexed weekday_indexed() const NOEXCEPT
CONSTCD11 month(unsigned m) NOEXCEPT
CONSTCD14 month & operator++() NOEXCEPT
CONSTCD14 month & operator+=(const months &m) NOEXCEPT
CONSTCD11 bool ok() const NOEXCEPT
CONSTCD14 month & operator--() NOEXCEPT
CONSTCD14 month & operator-=(const months &m) NOEXCEPT
CONSTCD11 unsigned index() const NOEXCEPT
CONSTCD11 weekday_indexed(const islamic::weekday &wd, unsigned index) NOEXCEPT
CONSTCD11 islamic::weekday weekday() const NOEXCEPT
CONSTCD11 bool ok() const NOEXCEPT
CONSTCD11 islamic::weekday weekday() const NOEXCEPT
CONSTCD11 weekday_last(const islamic::weekday &wd) NOEXCEPT
CONSTCD11 bool ok() const NOEXCEPT
CONSTCD14 weekday & operator--() NOEXCEPT
CONSTCD11 weekday_indexed operator[](unsigned index) const NOEXCEPT
CONSTCD14 weekday & operator-=(const days &d) NOEXCEPT
CONSTCD11 bool ok() const NOEXCEPT
static CONSTCD11 unsigned char weekday_from_days(int z) NOEXCEPT
CONSTCD11 weekday(unsigned wd) NOEXCEPT
CONSTCD14 weekday & operator++() NOEXCEPT
CONSTCD14 weekday & operator+=(const days &d) NOEXCEPT
CONSTCD11 bool ok() const NOEXCEPT
CONSTCD11 islamic::month month() const NOEXCEPT
CONSTCD14 year_month_day_last & operator-=(const months &m) NOEXCEPT
CONSTCD14 year_month_day_last & operator+=(const months &m) NOEXCEPT
CONSTCD14 islamic::day day() const NOEXCEPT
CONSTCD11 islamic::month_day_last month_day_last() const NOEXCEPT
islamic::month_day_last mdl_
CONSTCD11 islamic::year year() const NOEXCEPT
CONSTCD11 year_month_day_last(const islamic::year &y, const islamic::month_day_last &mdl) NOEXCEPT
CONSTCD14 days to_days() const NOEXCEPT
CONSTCD11 islamic::day day() const NOEXCEPT
CONSTCD14 year_month_day & operator+=(const months &m) NOEXCEPT
CONSTCD11 islamic::year year() const NOEXCEPT
CONSTCD11 islamic::month month() const NOEXCEPT
static CONSTCD14 year_month_day from_days(days dp) NOEXCEPT
CONSTCD14 year_month_day & operator-=(const months &m) NOEXCEPT
CONSTCD14 bool ok() const NOEXCEPT
CONSTCD11 year_month_day(const islamic::year &y, const islamic::month &m, const islamic::day &d) NOEXCEPT
CONSTCD11 islamic::month month() const NOEXCEPT
islamic::weekday_last wdl_
CONSTCD11 bool ok() const NOEXCEPT
CONSTCD14 year_month_weekday_last & operator-=(const months &m) NOEXCEPT
CONSTCD11 islamic::year year() const NOEXCEPT
CONSTCD11 islamic::weekday_last weekday_last() const NOEXCEPT
CONSTCD14 year_month_weekday_last & operator+=(const months &m) NOEXCEPT
CONSTCD11 year_month_weekday_last(const islamic::year &y, const islamic::month &m, const islamic::weekday_last &wdl) NOEXCEPT
CONSTCD14 days to_days() const NOEXCEPT
CONSTCD11 islamic::weekday weekday() const NOEXCEPT
static CONSTCD14 year_month_weekday from_days(days dp) NOEXCEPT
CONSTCD14 year_month_weekday & operator+=(const months &m) NOEXCEPT
CONSTCD14 year_month_weekday & operator-=(const months &m) NOEXCEPT
CONSTCD11 year_month_weekday(const islamic::year &y, const islamic::month &m, const islamic::weekday_indexed &wdi) NOEXCEPT
CONSTCD14 days to_days() const NOEXCEPT
CONSTCD11 islamic::month month() const NOEXCEPT
CONSTCD11 islamic::year year() const NOEXCEPT
CONSTCD11 unsigned index() const NOEXCEPT
CONSTCD11 islamic::weekday weekday() const NOEXCEPT
islamic::weekday_indexed wdi_
CONSTCD11 islamic::weekday_indexed weekday_indexed() const NOEXCEPT
CONSTCD14 bool ok() const NOEXCEPT
CONSTCD11 year_month(const islamic::year &y, const islamic::month &m) NOEXCEPT
CONSTCD11 bool ok() const NOEXCEPT
CONSTCD14 year_month & operator+=(const months &dm) NOEXCEPT
CONSTCD14 year_month & operator-=(const months &dm) NOEXCEPT
CONSTCD11 islamic::month month() const NOEXCEPT
CONSTCD11 islamic::year year() const NOEXCEPT
CONSTCD14 year & operator++() NOEXCEPT
CONSTCD14 year & operator-=(const years &y) NOEXCEPT
static CONSTCD11 year min() NOEXCEPT
CONSTCD14 bool is_leap() const NOEXCEPT
CONSTCD14 year & operator--() NOEXCEPT
CONSTCD11 year(int y) NOEXCEPT
static CONSTCD11 year max() NOEXCEPT
CONSTCD14 year & operator+=(const years &y) NOEXCEPT
CONSTCD11 bool ok() const NOEXCEPT
decltype(std::ratio_divide< R1, R2 >{}) ratio_divide
decltype(std::ratio_multiply< R1, R2 >{}) ratio_multiply
CONSTDATA date::month dec
local_time< days > local_days
std::chrono::duration< int, detail::ratio_multiply< std::ratio< 7 >, days::period > > weeks
std::chrono::duration< int, detail::ratio_multiply< std::ratio< 24 >, std::chrono::hours::period > > days
sys_time< days > sys_days
CONSTDATA islamic::last_spec last
std::basic_ostream< CharT, Traits > & operator<<(std::basic_ostream< CharT, Traits > &os, const day &d)
CONSTCD11 bool operator>=(const day &x, const day &y) NOEXCEPT
std::chrono::duration< int, date::detail::ratio_multiply< std::ratio< 10631, 30 >, days::period > > years
CONSTCD11 bool operator!=(const day &x, const day &y) NOEXCEPT
CONSTCD11 bool operator>(const day &x, const day &y) NOEXCEPT
CONSTCD11 bool operator<(const day &x, const day &y) NOEXCEPT
CONSTCD11 day operator+(const day &x, const days &y) NOEXCEPT
CONSTCD11 day operator-(const day &x, const days &y) NOEXCEPT
CONSTCD11 year_month operator/(const year &y, const month &m) NOEXCEPT
CONSTCD11 bool operator<=(const day &x, const day &y) NOEXCEPT
CONSTCD11 bool operator==(const day &x, const day &y) NOEXCEPT
date::local_days local_days
std::chrono::duration< int, date::detail::ratio_divide< years::period, std::ratio< 12 > > > months
Namespace for mathematical applications.