私のPCには小人が住んでいるかもと真剣に思う今日この頃。
今日もまた小人のせいかと思ったら、javascriptの仕様だったというお話。
日付入力欄に入力補助用のカレンダーを表示させ、入力欄とカレンダーが連動して動く処理をjavascriptで記述しました。
「できた!」と思って動作確認をしたら、なぜかカレンダー表示が前月の最終日に戻ってしまう場合があるんです。
よくよく確認してみると、8日,9日だけセットする日の値が0になっています。
絶対に小人の仕業にちがいないと確信しましたが、念のため調べてみました。
ネットで調べたら、同じような境遇の人が多数いました。
原因はjavascriptでは先頭に「0」が付いた数値は8進数と見なされるため。
日付が1桁の場合、「01」のように先頭ゼロ埋めになっており、parseInt関数でその日付が数値かどうかのチェックを行っていたため、8進数に存在しない08、09では0が返ってきていました。
parseInt関数の第2引数に何進数でチェックするかを設定できるので、そこで10進数であると設定してあげることで8日、9日でも正しく動作するようになりました。
javascriptでは先頭ゼロ埋めに要注意です。
o