ISOWeek を使って ISO の週番号を計算する
ある日の ISO 8601 の週番号を知りたいことがあります
先週とか今週を HTML の time
要素でマークアップする時です
の日記で今週をマークアップする時は、2020年の33週目なので <time datetime="2020-W33">今週</time>
になります
HTML の 2.4.5.8 Weeks と ISO 8601 の週番号は異なる場合がありますが For modern purposes, a week as defined here is
equivalent to ISO weeks as defined in ISO 8601. [ISO8601]
とある通り普段はあまり気にする必要がないので今回は無視します
ついでに言うと ISO 8601 では月曜日を週の初めとしているので、例えば日曜日始まりで2020年11月第1週を表現したい場合は 2020年11月1日から7日 などの表現に変えた方が妥当かもしれません
この ISO 8601 の週番号の計算は .NET の ISOWeek クラス (System.Globalization) | Microsoft Docs で簡単に行う事が出来ます
PowerShell で ISOWeek
の GetWeekOfYear
を使って今日の週番号を計算するコードは以下の通りです
ps> [Globalization.ISOWeek]::GetWeekOfYear([Datetime]::Now); 33
非常に個人的な話で恐縮ですが、私は ISO 8601 の週番号を計算する関数を自作する前に知りたかったです