diff options
Diffstat (limited to 'calendar/cal-util/timeutil.c')
-rw-r--r-- | calendar/cal-util/timeutil.c | 26 |
1 files changed, 18 insertions, 8 deletions
diff --git a/calendar/cal-util/timeutil.c b/calendar/cal-util/timeutil.c index 764ec5d078..7bb4c904ec 100644 --- a/calendar/cal-util/timeutil.c +++ b/calendar/cal-util/timeutil.c @@ -319,35 +319,45 @@ time_month_end (time_t t) return mktime (&tm); } +/* Returns the start of the week. week_start_day should use the same values + as mktime(), i.e. 0 (Sun) to 6 (Sat). */ time_t -time_week_begin (time_t t) +time_week_begin (time_t t, int week_start_day) { struct tm tm; - - /* FIXME: make it take week_starts_on_monday into account */ + int offset; tm = *localtime (&t); + + /* Calculate the current offset from the week start day. */ + offset = (tm.tm_wday + 7 - week_start_day) % 7; + tm.tm_hour = 0; tm.tm_min = 0; tm.tm_sec = 0; - tm.tm_mday -= tm.tm_wday; + tm.tm_mday -= offset; tm.tm_isdst = -1; return mktime (&tm); } +/* Returns the end of the week. week_start_day should use the same values + as mktime(), i.e. 0 (Sun) to 6 (Sat). */ time_t -time_week_end (time_t t) +time_week_end (time_t t, int week_start_day) { struct tm tm; - - /* FIXME: make it take week_starts_on_monday into account */ + int offset; tm = *localtime (&t); + + /* Calculate the current offset from the week start day. */ + offset = (tm.tm_wday + 7 - week_start_day) % 7; + tm.tm_hour = 0; tm.tm_min = 0; tm.tm_sec = 0; - tm.tm_mday += 7 - tm.tm_wday; + tm.tm_mday += 7 - offset; tm.tm_isdst = -1; return mktime (&tm); |