cal: fix first week calculation

Commit efafeaf set 1 Jan as week 1, but the change
was missed in week_to_day() and in the man page.

Before
cal --week=40 --iso 1752
      October 1752
   Su Mo Tu We Th Fr Sa
41  1  2  3  4  5  6  7
42  8  9 10 11 12 13 14
43 15 16 17 18 19 20 21
44 22 23 24 25 26 27 28
45 29 30 31

Patched
cal --week=40 --iso 1752
     September 1752
   Su Mo Tu We Th Fr Sa
36                 1  2
37  3  4  5  6  7  8  9
38 10 11 12 13 14 15 16
39 17 18 19 20 21 22 23
40 24 25 26 27 28 29 30

Signed-off-by: J William Piggott <elseifthen@gmx.com>
This commit is contained in:
J William Piggott 2018-01-22 07:03:27 -05:00 committed by Karel Zak
parent e572a765f9
commit 6304358cb7
2 changed files with 7 additions and 7 deletions

View File

@ -195,13 +195,13 @@ highlighted if the calendar is displayed on a terminal. If no parameters are
specified, the current month's calendar is displayed.
.SH NOTES
A year starts on January 1. The first day of the week is determined by the
locale.
locale or the
.BR \-\-sunday \ and \ \-\-monday \ options.
.PP
The week numbering depends on the choice of the first day of the week. If Sunday
(the default) is used for the first day of the week, then the customary North
American numbering will be used, i.e. the first Sunday of the year starts the
first week. If Monday is selected, then the ISO-8601 standard week numbering
is used, where the first Thursday of the year is in week number 1.
The week numbering depends on the choice of the first day of the week. If it
is Sunday then the customary North American numbering is used, where 1 January
is in week number 1. If it is Monday then the ISO 8601 standard week numbering
is used, where the first Thursday is in week number 1.
.SH COLORS
Implicit coloring can be disabled as follows:
.RS

View File

@ -1003,7 +1003,7 @@ static int week_to_day(const struct cal_control *ctl)
if (ctl->weektype & WEEK_NUM_ISO)
yday -= (wday >= FRIDAY ? -2 : 5);
else
yday -= (wday == SUNDAY ? 6 : -1); /* WEEK_NUM_US */
yday -= 6; /* WEEK_NUM_US */
if (yday <= 0)
return 1;