aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/recur.c9
-rw-r--r--src/ui-day.c18
2 files changed, 19 insertions, 8 deletions
diff --git a/src/recur.c b/src/recur.c
index 1fd01ad..d424bca 100644
--- a/src/recur.c
+++ b/src/recur.c
@@ -433,8 +433,8 @@ struct recur_apoint *recur_apoint_scan(FILE * f, struct tm start,
tend = mktime(&end);
if (until.tm_year != 0) {
- until.tm_hour = 23;
- until.tm_min = 59;
+ until.tm_hour = 0;
+ until.tm_min = 0;
until.tm_sec = 0;
until.tm_isdst = -1;
until.tm_year -= 1900;
@@ -768,7 +768,8 @@ recur_item_find_occurrence(time_t item_start, long item_dur,
if (date_cmp_day(day_start, item_start) < 0)
return 0;
- if (rpt_until != 0 && day_start >= rpt_until + item_dur)
+ if (rpt_until != 0 && day_start >= rpt_until +
+ (item_start - update_time_in_date(item_start, 0, 0)) + item_dur)
return 0;
t = day_start;
@@ -834,7 +835,7 @@ recur_item_find_occurrence(time_t item_start, long item_dur,
if (LLIST_FIND_FIRST(item_exc, &t, exc_inday))
return 0;
- if (rpt_until != 0 && t > rpt_until)
+ if (rpt_until != 0 && t >= NEXTDAY(rpt_until))
return 0;
localtime_r(&t, &lt_item_day);
diff --git a/src/ui-day.c b/src/ui-day.c
index 49c47ae..e0e306b 100644
--- a/src/ui-day.c
+++ b/src/ui-day.c
@@ -420,7 +420,11 @@ static void update_rept(struct rpt **rpt, const time_t start, llist_t *exc)
keys_wgetch(win[KEY].p);
continue;
}
- newuntil = date_sec_change(start, 0, days);
+ /* Until is midnight of the day. */
+ newuntil = date_sec_change(
+ update_time_in_date(start, 0, 0),
+ 0, days
+ );
} else {
int year, month, day;
if (!parse_date(timstr, conf.input_datefmt, &year,
@@ -432,7 +436,8 @@ static void update_rept(struct rpt **rpt, const time_t start, llist_t *exc)
struct date d = { day, month, year };
newuntil = date2sec(d, 0, 0);
}
- if (newuntil >= start)
+ /* Conmpare days (midnights) - until-day may equal start day. */
+ if (newuntil >= update_time_in_date(start, 0, 0))
break;
mem_free(timstr);
@@ -943,7 +948,11 @@ void ui_day_item_repeat(void)
keys_wgetch(win[KEY].p);
continue;
}
- until = date_sec_change(p->start, 0, days);
+ /* Until is midnight of the day. */
+ until = date_sec_change(
+ update_time_in_date(p->start, 0, 0),
+ 0, days
+ );
} else {
int year, month, day;
if (!parse_date(user_input, conf.input_datefmt,
@@ -955,7 +964,8 @@ void ui_day_item_repeat(void)
struct date d = { day, month, year };
until = date2sec(d, 0, 0);
}
- if (until >= p->start)
+ /* Compare days (midnights) - until-day may equal start day. */
+ if (until >= get_slctd_day())
break;
datestr = date_sec2date_str(p->start, DATEFMT(conf.input_datefmt));