JavaScriptでは1月は0月、pythonでは1月は1月
Excelのマクロ ⇒ python ときて、最近JavaScriptを趣味で触り始めました。日曜大工ならぬ日曜プラグラマーを楽しんでいます。
触り始めたJavaScriptで、日付データでハマりました。
JavaScriptでhtmlから日付を受け取って月や曜日を計算しようと思ったところでつまづきました。
結論から言うと、「JavaScriptでは1月は0で12月は11」です。
これが分かっておらず、思った通りの計算にならずに悩みました。答えがでると、曜日が日曜日が0で土曜日が6というのと同じで、そういうことかと解決しました。
簡単な例ではこんな感じです。
<script>
//今日のdateオブジェクトを取得する
var today_date=new Date();
//年、月、日、曜日を取得する
var year = today_date.getFullYear();
var month = today_date.getMonth();
var day= today_date.getDate();
var weekday = today_date.getDay();
document.write("今日は"+year+"年"+month+"月"+day+"日です<br>");
document.write("曜日は" + weekday);
</script>
これを実行すると、今日が2023年2月2日(木)だとすると、以下のようになります。
今日は2023年1月2日です
曜日は4
上で書いた通り、JavaScriptでは1月が0、2月が1、、、12月が11なので、2月なのに月が1月と出力されてしまいます。
var month = today_date.getMonth()+1;
とする必要があります。
ネットで調べると、「欧米では1月は”January”や”Jan”、2月は”February”や”Feb”で表示するのが普通なので曜日と同じで0で始まる」ということのようです。
曜日や月を
array=[“sunday”, “monday”,,,]、
array=[“Jan”, “Feb”, ,,,]
のように配列に入れて、array[0]とかarray[1]などで呼び出すのには、0始まりが便利ということで納得しました。
でも、「2023‐02‐02」で表示したりもするだろ、と思いますし、pythonだと1月は1、2月は2ですし。
結局のところ、その言語を作ったときに、そう決めたのでそうなってるということでしょう。
1月が1か、1月が0か、主要言語を調べてみた
主要?言語について調べてみました。
月に関しては比較的新しい?今風?の言語は、1~12(python、Ruby、PHPなど)、伝統ある言語は0~11(C言語、JAVA)という感じでしょうか。
曜日に関しては、もうバラバラです。JAVAは月は0から始まるのに曜日は1から始まるようです。
月 | 曜日 | 日付 | |
---|---|---|---|
python(datetime) | 1~12 | 月0~日6 | 1~31 |
C言語(tm構造体) | 0~11 | 日0~土6 | 1~31 |
JAVA(calenda) | 0~11 | 日1~土7 | 1~31 |
JavaScript(Date) | 0~11 | 日0~土6 | 1~31 |
SQL(DATETIME型) | 1~12 | 日1~土7 | 1~31 |
PHP(DateTime) | 1~12 | w:日0~土6 N:月1~日6 | 1~31 |
Ruby(Date) | 1~12 | 日0~土6 | 1~31 |
Perl(DateTime) | 1~12 | 月1~日7 | 1~31 |
いろんな言語を使おうと思うと、これだけで頭がごっちゃになりそうですね。プロのプログラマーの人は大変ですね。
コメント