• ベストアンサー

parseIntでうまく値がとれない

初歩的な質問になってしまうかもしれませんがよろしくおねがいします。 日付が正しく入っているか確認するようにしたいのですがうまくいきません。 正しく入っているか確認する関数はもう用意してあります。 ※jsIsDate(yyyy,mm,dd)というのがその関数です。  引数に年 月 日をいれるものになります。 そこで私は「2003/09/12」という形でテキストボックスに入力されたデータから、 「2003」「9」「12」という値を取得して、 上のjsIsDate関数の引数に入れようと思いました。 しかし、2003と12はうまく入ったのですが、月の「09」が「9」ではなく「0」と取れてしまうのです。 parseIntの使い方が間違っているのでしょうか? そもそも値の取得の仕方が間違ってるのでしょうか? なにかヒントをいただけるとうれしいです。 よろしくおねがいします。 dt = form1.txtOpenday.value.split("/"); if(!jsIsDate(parseInt(dt[0]),parseInt(dt[1]),parseInt(dt[2]))){  alert("存在しない日付が入力されています。");  form1.txtOpenday.focus();  return; } txtOpenday...テキストボックスの名前です。

質問者が選んだベストアンサー

  • ベストアンサー
noname#199778
noname#199778
回答No.3

parseInt()関数を使うのであれば、先の回答にあるように「parseInt(dt[x],10)」という形で10進数として変換する必要があると思います。 parseInt()関数で第二引数を指定しない場合、値の先頭に0がくると8進数として、値の先頭に0xがくると16進数として変換を行うので、「09」では9が8進数では数値として存在しないために文字列として判断され、0のみが返されているのではないでしょうか。 他に渡す値を数値型化する方法としては、Number()関数で「Number(dt[x])」という形にする方法も取れると思いますし、もっと簡単に「dt[x]-0」という記述で数値として扱わせることも可能と思います(0を減算してやることで型を数値として扱うようにしています)。 これらの方法を取るのがよいのではないでしょうか。 参考になれば。

yurikoxxxx
質問者

お礼

早速のご回答ありがとうございます。 「parseInt(dt[x],10)」という形で入力しなおしたところ、無事処理ができるようになりました。 (やっぱり8進数で取得しようとしてたんですね。) Number()関数も機会があれば使ってみたいと思います。 みなさんのお陰です。本当にありがとうございました!

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • Y_eRu
  • ベストアンサー率32% (33/101)
回答No.2

こんにちわ(o^-^o) たぶん10進数に直さないといけないのではないかと思うので parseInt(dt[0])これを parseInt(dt[0],10) ↑このようにしてみたらどぉでしょうか? 見当違いだったらすみません 失礼しましたm(_ _)m

yurikoxxxx
質問者

お礼

早速のご回答ありがとうございます。 「parseInt(dt[x],10)」という形で入力しなおしたところ、無事処理ができるようになりました。 (やっぱり8進数で取得しようとしてたんですね。) みなさんのお陰です。本当にありがとうございました!

すると、全ての回答が全文表示されます。
  • itomizu
  • ベストアンサー率47% (8/17)
回答No.1

なぜ0になるかはちょっとわかりませんが、 parseIntでは0で始まる数値は8進数と判断するようです。 ですから先頭が0の文字列に対して substring(1)等で0を省く処理をしてみてはどうでしょう? 月だけでなく日もその処理が必要です。

yurikoxxxx
質問者

お礼

早速のご回答ありがとうございます。 「parseInt(dt[x],10)」という形で入力しなおしたところ、無事処理ができるようになりました。 (やっぱり8進数で取得しようとしてたんですね。) みなさんのお陰です。本当にありがとうございました!

すると、全ての回答が全文表示されます。

関連するQ&A