[11] [DFN[[RUBYB[月]@en[month]]]]は、[[先発グレゴリオ月]]を表します。ただし、
[[月]]は[[時間帯]]の情報を持ちませんし、[[日付]]の精度は[[年]]と[[月]]だけで、[[日]]は特定しません。
[SRC@en[[[HTML5]]]]

* 仕様書

[REFS[
- [1] [CITE@en-US-x-hixie[HTML Standard]] ([TIME[2014-05-05 21:57:42 +09:00]] 版) <http://www.whatwg.org/specs/web-apps/current-work/#months>
- [2] [CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2016-02-04 17:09:00 +09:00]] 版) <https://html.spec.whatwg.org/#month-state-(type=month)>
]REFS]

* 構文定義

- [13] [CODE(ABNF)[[DFN[[RUBYB[妥当な月]@en[valid month]]]] := 4*[[数字]] "-" 2[[数字]]]]
[SRC@en[[[HTML5]]]]
-- 1つ目の[[数字]]列は、[[年]]を表す[[正数]]
-- 2つ目の[[数字]]列は、[[月]]を表す 1〜12 の[[数]]

;; [71] [[HTML]] は1年より前の[[年]] ([[紀元前]]) に対応していません。

* 構文解析

[14] [DFN[[RUBYB[月文字列の構文解析]@en[parse a month string]]]]
[SRC@en[[[HTML5]]]]:
= [[月部品の構文解析]]を行い、それが何も返さなかったら、何も返さないで終える
= [[文字列]]がそれで終わっていなければ、何も返さないで終える
= (1) で得られた[[年]]と[[月]]を返す

[15] [DFN[[RUBYB[月部品の構文解析][parse a month component]]]]
[SRC@en[[[HTML5]]]]:
- 与えられた[[文字列]]が[[正規表現]] [CODE(regexp)[([[数字]]{4,})-([[数字]]{2})]]
に[[一致]]すれば、
-= $1 を[[十進数]]として解釈したものを[[年]]とする
-= $2 を[[十進数]]として解釈したものを[[月]]とする
-= [[年]]が 0 なら、何も返さない
-= [[月]]が 1〜12 でなければ、何も返さない
-= そうでない場合、[[年]]と[[月]]を返す
- そうでない場合、何も返さない

* 数値表現

[66] [CODE(DOMa)@en[[[valueAsNumber]]]] [[DOM属性]]では、
[[1970年]][[1月]]からの[[月]]の数によって表現されます。

;; [69] 他とは違ってこれだけ[[ミリ秒]]単位の[[数]]ではなく、[[月]]の数になっています。
[[年]]によって[[月]]に属する[[日]]の数が異なるからでしょうか。

[3] [CITE[HTML Standard]] は「1970年1月と当該[[月]]の間の[[月]]の数」と規定しています [SRC[>>2]]。
この定義だと1970年以降だけでなく、1969年以前も[[正]]の値と解釈できてしまいますが、
実装は1969年以前の[[月]]だと[[負]]の値を返しますし、それが仕様書の意図と思われます。

[4] この数について [CITE[HTML Standard]] は特に名前を与えていませんが、
便宜上[DFN[[RUBYB[HTML月数]@en[HTML month number]]]]と呼ぶことがあります。

[67] [CODE(DOMa)@en[[[valueAsDate]]]] [[DOM属性]]では、
その[[月]]の初日の朝の [[UTC]] [[真夜中]]を表す [CODE(JS)@en[[[Date]]]] [[物体]]によって表現されます
[SRC[>>2]]。

[68] [[月]]を入力する [CODE(HTMLe)@en[[[input]]]]
[[要素]]の [CODE(HTMLa)@en[[[step]]]] [[属性]]では、
[[時間]]が[[月]]単位の[[数]]によって表現されます。
[SRC@en[[[HTML5]]]]

* 文脈

[52] [CODE(HTMLa)@en[[[type]]]] が [CODE(HTML)@en[[[month]]]] の [CODE(HTMLe)@en[[[input]]]] [[要素]]で使用されます。

[72] [CODE(HTMLe)@en[[[time]]]] [[要素]]にも使用できます。

[73] [[autofill]] の定義にも用いられています。