-
Notifications
You must be signed in to change notification settings - Fork 4
/
203.txt
174 lines (132 loc) · 6.53 KB
/
203.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
[1] [[月]]を[[週]]に分けて考えるとき、最初から順に第1週、第2週と数えていきます。
[2] [[週]]初について[[日曜日]]、[[土曜日]]など様々な考え方があるため、
[[月の週]]の表す対象にもばらつきがあります。
[3] 更に[[週初]]と[[月初]]は一般に異なるので、これをどう処理するかも問題となってきます。
[91] 前後の[[月]]に含まれる[[日]]はその[[週]]に含むとは言わないことが多いので、
その場合[[週]]は7日未満となります。
[92] 前月の第5週が翌月の第1週になるなど、[[月]]の最後と最初の[[週]]が同じ[[週]]を指すことがよくあります。
[4] 普通、こうした違いが問題となる厳密な指定が必要な場面では使われないか、
明確な定義を与えて利用されることとなります。
* 週の数
[8] [[グレゴリオ暦]]の[[月]]は、4つか5つの[[週]]を含むことになります。
[9] [[閏年]]以外 ([[平年]]) の[[2月]]はちょうど28日なので、
[[週]]初と[[月]]初が重なる場合、ちょうど4[[週]]となります。
[14] それ以外の[[月]]は5[[週]]または6[[週]]となります。
第1週と最終週の一方または両方は7日に満たない (前後の[[月]]にまたがる)
こととなります。
* 計算
[13] ある[[月]] [VAR[m]] の [VAR[d]] [[日]]が属する[[週]] [VAR[n]] は、
次のようにして求めることができます。
[FIG(steps)[
= [15]
[VAR[wd]] を、 [VAR[d]] の[[曜日]]に設定します。
ここで、[[曜日]]とは[[週]]の最初の[[日]]なら [N[0]]、
最後の[[日]]なら [N[6]] となる[[整数]]とします。
= [16]
[VAR[n]] = [FENCED[⌊][ [FRAC[12 + [VAR[d]] - [VAR[wd]]][7]] ][⌋]]
を返します。
]FIG]
[17]
なぜなら、
[FIG(steps)[
= [18]
[VAR[fwd]] を、[VAR[m]] 月 [N[1]] 日の[[曜日]]に設定します。
= [19]
すると [VAR[m]] 月第1週には [N[1]] 日よりも前に
[VAR[fwd]] 個の[[日]]が ([VAR[m]] - 1 月に) 存在することとなります。
= [20]
第 [VAR[n]] [[週]]には [VAR[d]] よりも後に
7 - ([VAR[wd]] + 1) = 6 - [VAR[wd]]
個の[[日]]が存在します。
= [21]
[VAR[m]] 月の第1週から第 [VAR[n]] 週までに含まれる[[日]]の合計数は、
[FIG(math)[
[N[7]] [VAR[n]] = [VAR[fwd]] + [VAR[d]] + (6 - [VAR[wd]])
]FIG]
と表せます。
= [22]
ここで、
[N[0]] ≦ [VAR[fwd]] ≦ [N[6]]
ですから、
[FIG(math)[
[N[0]] + [VAR[d]] + (6 - [VAR[wd]])
≦ 7 [VAR[n]] ≦
[N[6]] + [VAR[d]] + (6 - [VAR[wd]])
]FIG]
となります。
= [23]
[FIG(math)[
[VAR[d]] - [VAR[wd]] + 12 - 6
≦ 7 [VAR[n]] ≦
[VAR[d]] - [VAR[wd]] + 12
]FIG]
= [24]
[FIG(math)[
[FRAC[ [VAR[d]] - [VAR[wd]] + 12 ][7]] - 1
<
[FRAC[ [VAR[d]] - [VAR[wd]] + 12 ][7]] - [FRAC[6][7]]
≦ [VAR[n]] ≦
[FRAC[ [VAR[d]] - [VAR[wd]] + 12 ][7]]
]FIG]
=
[25]
[FIG(math)[
[VAR[n]] = [FENCED[⌊][ [FRAC[[VAR[d]] - [VAR[wd]] + 12][7]] ][⌋]]
]FIG]
]FIG]
[26]
逆に、
[VAR[m]] 月の第 [VAR[n]] [[週]]の
[VAR[wd]]
[[曜日]]の[[日]] [VAR[d]]
は、
次のように求められます。
[FIG(steps)[
= [28]
[VAR[fwd]] を、[VAR[m]] 月 [N[1]] 日の[[曜日]]に設定します。
= [27]
[VAR[d]] = - [VAR[fwd]] + 7 [VAR[n]] + [VAR[wd]] - 6
]FIG]
[29] これは >>21 を[[移項]]したものです。
* LDML における月の週
[SEE[ [[LDML/CLDR週]] ]]
* 年の週と月の週
[31]
常識的な感覚によれば、最初の[[年の週]]は[[年]]の最初の[[月]]の[[月の週]]となり、
最後の[[年の週]]は[[年]]の最後の[[月]]の[[月の週]]となっていることが期待されます。
[32]
[[LDML/CLDR週]]はそれを暗黙の前提としています。
* 関連
[5] [[第何何曜日]]とは似て非なるものです。
* メモ
[FIG(quote)[
[FIGCAPTION[
[6] [CITE[No.680 第何何曜日って?: こんぶブログ~気ままな雑記帳]]
(2018年1月25日 (木) [TIME[2018-07-29 21:48:20 +09:00]])
<http://kombu-blog.cocolog-nifty.com/zakki/2018/01/no680-3233.html>
]FIGCAPTION]
> ○週目という表記はその年の第何週目という意味でこれも国際規格(ISO8601)で定められているので、今月の第2週目などいう表現は本来間違っている。
]FIG]
... と主張する人もいますが、根拠が示されていません。この [[Webページ]]とほとんど同じ
(おそらくパクリ元の) [[Webページ]]があり、そこには
[FIG(quote)[
[FIGCAPTION[
[7] [CITE@ja[第何週第何曜日という数え方について]]
([TIME[2018-05-17 04:24:20 +09:00]])
<http://week2017.xyz/you/reference.html>
]FIGCAPTION]
> 国際的な日付に関する規格(ISO8601)においては「その年の第何週」という規格はあるものの「その月の第何週」という規格は存在しません。そのため、ここでも月の週については誤解を招くため「第何週」という表現はしていません。
]FIG]
... と書かれています。この元々の [[Webページ]]は、定義がないので自身は採用しないと述べているだけで、
その正誤には言及していません。デマ記事の方はこれを曲解して「間違っている」などと断定したのでしょう。
[10] [CITE@ja[指定した日付が、その月の第何週かを求める方法 -月曜から日曜の作業内- Visual Basic(VBA) | 教えて!goo]]
([TIME[2018-07-30 01:12:05 +09:00]])
<https://oshiete.goo.ne.jp/qa/393196.html>
[11] [CITE@ja[JavaScript で週の計算 - Movable Type技術ブログ]]
([TIME[2018-07-30 01:13:27 +09:00]])
<http://www.mtcms.jp/movabletype-blog/tech/200903162111.html>
[12] [CITE@ja[Perlでその日が月の第何週に存在しているかを計算する関数を書いてみました - 知らないことがあってもへっちゃらさ]]
([TIME[2018-07-30 01:19:20 +09:00]])
<http://blog.mukairiku.net/2010/09/perl%E3%81%A7%E3%81%9D%E3%81%AE%E6%97%A5%E3%81%8C%E6%9C%88%E3%81%AE%E7%AC%AC%E4%BD%95%E9%80%B1%E3%81%AB%E5%AD%98%E5%9C%A8%E3%81%97%E3%81%A6%E3%81%84%E3%82%8B%E3%81%8B%E3%82%92%E8%A8%88%E7%AE%97%E3%81%99%E3%82%8B%E9%96%A2%E6%95%B0%E3%82%92%E6%9B%B8%E3%81%84%E3%81%A6%E3%81%BF%E3%81%BE%E3%81%97%E3%81%9F.html>
[30] [CITE[公開メモ日記 - ある日付がその月の第何週目かを判定する方法]] ([CODE[2007-02-24 02:17:08 +09:00]] 版) <http://knoa.jp/memo/?id=2007-02-23+12:25>
([TIME[2007-02-23 17:20:13 +00:00]])