summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/times.cc20
-rw-r--r--src/times.h4
2 files changed, 11 insertions, 13 deletions
diff --git a/src/times.cc b/src/times.cc
index 77968127..4ea7389b 100644
--- a/src/times.cc
+++ b/src/times.cc
@@ -118,21 +118,19 @@ date_t parse_date(const char * str, int current_year)
return gregorian::date_from_tm(when);
}
-date_t interval_t::first(const optional<date_t>& moment) const
+date_t interval_t::first(const optional<date_t>& moment)
{
- if (! is_valid(begin))
- throw_(date_error,
- "Use of interval_t::first() with specifying a range start");
+ if (! is_valid(begin)) {
+ // Find an efficient starting point for the upcoming while loop. We want
+ // a date early enough that the range will be correct, but late enough
+ // that we don't spend hundreds of thousands of loops skipping through
+ // time.
+ begin = date_t(moment->year(), gregorian::Jan, 1);
+ }
date_t quant(begin);
- if (moment && *moment > quant) {
- // Find an efficient starting point for the upcoming while loop.
- // We want a date early enough that the range will be correct, but
- // late enough that we don't spend hundreds of thousands of loops
- // skipping through time.
-
- date_t quant(moment->year(), gregorian::Jan, 1);
+ if (moment && *moment >= quant) {
date_t temp;
while (*moment >= (temp = increment(quant))) {
if (quant == temp)
diff --git a/src/times.h b/src/times.h
index 2d47d60b..54c1dc80 100644
--- a/src/times.h
+++ b/src/times.h
@@ -162,10 +162,10 @@ struct interval_t
}
void set_start(const date_t& moment) {
- begin = moment;
+ begin = first(moment);
}
- date_t first(const optional<date_t>& moment = none) const;
+ date_t first(const optional<date_t>& moment = none);
date_t increment(const date_t&) const;
void parse(std::istream& in);