FC2ブログ

JavaScriptのparseIntは日付に使わない方が良い!?

JavaScript(JS)を書いててまた面白い?ことがありました。

2桁固定(1桁の場合は0を前につける)になっている日付の月や日を出力する際に、見やすくするために、1桁の場合は1桁で表示する(つまり2009/01/02だったら2009/1/2にする)ように変換しようとした時のことです。

JS側で書くことにして、よく行われているように、年月日それぞれ個別に取り扱うことにしました。つまり、今回の問題を単純化すれば、「2文字の文字列を入力として、前にゼロがついてたらとりのぞく処理」ができれば良いわけで、これを月と日について行うわけです。

いうまでもなく超簡単な処理だけに、いろいろ方法はあると思いますが、私はちょっと怠けて、一瞬で書いて済ませようと、一旦数値に変換してしまう方法をとりました。つまり、'01'を数値にすれば、1になるわけで、あとはそれを+で文字列とつなぐときにでも、JSが勝手に文字列の'1'にしてくれるだろうという目論見です。(^^;)

ところで、JSで文字列を数値にする方法は、有名どころとしては、
 1、paraseInt(str)を使う
 2、Number(str)を使う
 3、ゼロを引く(!)

などがありますが、私はなんとなく1にしました。

つまり、parseInt(month)したのです。

ところが、これが元で、ちょっと意外なハマりかたをしてしまいました。。

というのも、月でいえば、1月(01)から7月(07)までは、ちゃんと期待通り1月から7月になるのですが、8、9月が、忽然と「0月」になってしまうのです・・・。

つまり、
paraseInt('01')→1
paraseInt('02')→2
paraseInt('03')→3
paraseInt('04')→4
paraseInt('05')→5
paraseInt('06')→6
paraseInt('07')→7
paraseInt('08')→0
paraseInt('09')→0
になるのです・・・。

最初の私の反応は、うーん、不思議だ・・・でした・・・。(^^;)

当たり前じゃん!という方もおられると思いますが、そうなんです、paraseIntは、第二引数を指定せず、冒頭に0のついた文字列を入力すると、8進数扱いをしてくれる仕様だったのです。他にも16進数(0xで始まる)も認識するようで、そんなに親切な関数だったとは・・・。(^^;;)

結局、Number(month)を使ってあっさり解決しました。私と同じことでハマる方がいるかどうかは分かりませんが、なんか面白かったので一応ご参考までに・・・。(^^;;;)

コメント

No title

お久しぶりです~。JSの良さは最近書いていて、よく感じていますね~。
ブラウザでちょこちょこと実行できたりして、便利です。

>paraseIntは、第二引数を指定せず、冒頭に0のついた文字列を入力すると、8進数扱いをしてくれる

そうですね。自分は最初の頃、ここでお世話になりましたね。
ttp://www.tohoho-web.com/js/index.htm

JSをどんどん扱っていくとクラスの作成や継承、prototype関数などを使う機会が多くなりそうですね。自分は自ら作成するスクリプトでクラスとprototype関数を使う機会はないのですが・・・(最近のスクリプトで大体このような感じなので・・・)
ttp://3et.org/production/pikapika-mouse.html

JavaScriptで自分が特に凄いな~と思ったのは、このスクリプトですね。
ttp://zapanet.info/blog/item/1125

あと、オブジェクト指向に関する記述も興味深かったですね。
ttp://builder.japan.zdnet.com/sp/javascript-kickstart-2007/story/0,3800083428,20368698,00.htm

JavaScript突き詰めていくと、面白いですよ。

No title

>サンエタさん

来て下さりそうな予感がしておりました(^^)
情報ありがとうございます♪

私は最近はJSだとAjax関係が多いです。
上手く使うとWEBの仕事を
効率的にしてくれますね。(^^)

No title

>0のついた文字列を入力すると、8進数扱い
 妙なところに昔からのしきたりが残ってるんですねぇ。
 2,8,10,16進数の中で、一番使わない8進数。
 もう今更、7の次は8で良いや(^^;

>日経とJR西は反対に値が動くのですか~
 う~ん、そうでもないです。
 JR西でデイトレしてることもあるんですけど、デイトレ時の日経の値動きとの関連が自分の体に入ってるんだけど、その感覚と微妙にずれたというか・・・うう~ん、なんとも表現しにくいんだけど~
 んま、数日中には返済しちゃいます。

>今の私の区画は「枯れ畑」
 こんなおやぢダジャレを出すとは(爆)

 苗は予想以上に大事でっせ。
 自分で苗作りして、それを定植してみると、いかに苗が大事か分かります。
 弱い苗を植えるとそれこそ大げさじゃなくてサイズ1/2とかになります・・例えば枝豆なら収穫量が1/4とかになる。
 つまり畑の面責を無駄に消費することになるわけです。
 だから弱い苗は勿体なくても捨てた方が結果的に得になる。

 ホームセンターの苗と苗屋の苗を同時に同一の畑に植えれば一発で結果が出ます・・・その前に苗を比較しただけで落ち込みます。
 勿体なくても捨てるべきで、翌年からはホームセンターでは買わないようになると思います。

 近所のホームセンターで苗をたっぷり持ってレジに並んでる人達を見ると「だめ~、こんな所で買っちゃ」って言いたくなることも多々あり・・さすがに黙ってますけど(^^;

No title

>Mooさん

> 2,8,10,16進数の中で、一番使わない8進数。
> もう今更、7の次は8で良いや(^^;

そうですね~8進数はあまり使わないですね。。
JavaScriptで使う機会は・・・ますます思いつかないです(^^;)

JR株は他と比べると価格の単位が高いですね~
民営化したときの経緯とかなのでしょうか。。

苗ってとても大事なんですね・・・。
うちの近くで苗を売っているのはホームセンターか農協ぐらいなので、
農協をあたってみたいと思います。(^^;)
教えて下さりありがとうございます!

>自分で苗作りして、それを定植してみると、

Mooさんは苗からも作るのですか!!
さ、さすがです・・・。

>こんなおやぢダジャレを出すとは(爆)

つい出てしまいました(^^;)

コメントの投稿

トラックバック


この記事にトラックバックする(FC2ブログユーザー)