# # # patch "dates.cc" # from [e5cbb5bfbaa5d6b82900a814d589065919a51a23] # to [f2cbec98589e45cd6f5cf8a1e7d69e6f54f8defd] # # patch "dates.hh" # from [b1a386de6f39e217d0e5f9f1197c50968112dbd8] # to [96d6837b825444479af1813301dcd3216881167e] # ============================================================ --- dates.cc e5cbb5bfbaa5d6b82900a814d589065919a51a23 +++ dates.cc f2cbec98589e45cd6f5cf8a1e7d69e6f54f8defd @@ -459,6 +459,12 @@ date_t::operator -=(u64 const & other) return *this; } +s64 +date_t::operator -(date_t const & other) +{ + return d - other.d; +} + #ifdef BUILD_UNIT_TESTS #include "unit_tests.hh" @@ -744,6 +750,17 @@ UNIT_TEST(date, comparisons) v += 59000; UNIT_TEST_CHECK(v == date_t::from_string("9999-12-31T23:59:59")); UNIT_TEST_CHECK_THROW(v += 1000, std::logic_error); + + // check date differences + UNIT_TEST_CHECK(date_t::from_string("2000-05-05T00:00:01") - + date_t::from_string("2000-05-05T00:00:00") + == 1000); + UNIT_TEST_CHECK(date_t::from_string("2000-05-05T00:00:01") - + date_t::from_string("2000-05-05T00:00:02") + == -1000); + UNIT_TEST_CHECK(date_t::from_string("2000-05-05T01:00:00") - + date_t::from_string("2000-05-05T00:00:00") + == 3600000); } #endif ============================================================ --- dates.hh b1a386de6f39e217d0e5f9f1197c50968112dbd8 +++ dates.hh 96d6837b825444479af1813301dcd3216881167e @@ -60,6 +60,9 @@ struct date_t date_t & operator +=(u64 const & addend); date_t & operator -=(u64 const & addend); + // Difference between two dates in milliseconds + s64 operator -(date_t const & other); + private: // The date as an unsigned 64-bit count of milliseconds since // the Unix epoch (1970-01-01T00:00:00.000).