JavaScriptのバグですか?

[上に] [前に] [次に]
摩訶不思議 1999/11/12(金) 14:44:29
皆様はじめまして。
下のスクリプトは、今日の日付(年月日)に0を詰めて
テキストに8桁表示するものです。
これが何故か、パソコンの時計を2000年にすると、
2023と表示されてしまいます。
document.test.text1.value = yyyy + mm + dd ;

document.test.text1.value = new String(yyyy) + new String(mm) + new String(dd) ;
に修正して対策は出来たのですが、何故2000年になると動きが
変わってしまうのでしょうか?
そもそもスクリプトの書き方が悪いのでしょうか?
それにしても、文字列の結合ではなく、数値と解釈して加算されたとしても
合計が合わないし...
どなたか分かる方おりましたら、宜しくお願いします。

以下、テストしたスクリプト。

<HTML>
<HEAD>
<SCRIPT LANGUAGE="JavaScript">
<!--
function GetToday(){
   today = new Date() ;
   yy = today.getYear() ;
   if( yy >= 100) {
       if( yy < 2000)
           yy = yy + 1900 ;
   }
   yyyy = ( yy < 2000 ) ? "19" + yy : yy ;
   m = today.getMonth() + 1 ;
   mm = ( m < 10 ) ? "0"+m : m ;
   d = today.getDate() ;
   dd = ( d < 10 ) ? "0"+d : d ;
   document.test.text1.value = yyyy + mm + dd ;
   return;
}
//-->
</SCRIPT>
<BODY>
<FORM NAME="test">
<INPUT TYPE="TEXT" NAME="text1" WIDTH="20">
<INPUT TYPE="BUTTON" value="今日の日付" onClick="GetToday()">
</FORM>
</BODY>
</HTML>

ぎん 1999/11/12(金) 15:29:10
> 2023と表示されてしまいます。
> 文字列の結合ではなく、数値と解釈して加算されたとしても
> 合計が合わないし...
2000 + 11 + 12 = 2023 であっているのでは?

ぎん 1999/11/12(金) 15:37:08
追加します。
> yyyy = ( yy < 2000 ) ? "19" + yy : yy ;
のところを
yyyy = ( yy < 2000 ) ? "19" + yy : "" + yy ;
とすると文字列と扱ってくれるため、直るとおもいます。

ちゃいパパ [HomePage] 1999/11/12(金) 15:52:23
document.test.text1.value = yyyy + mm + dd ;

document.test.text1.value = yyyy.toString() + mm + dd ;
にするといいみたい。

getYear()は1900年代は下二桁、2000年は2000を返します。(IE4)
>yyyy = ( yy < 2000 ) ? "19" + yy : yy ;
ここで 19は文字処理をしていますので、これ以降文字列になり、
2000はそのまま数値できます。

ちゃいパパ 1999/11/12(金) 16:01:13
回答途中で、別件対応していましたので、さきこされました!
ぎんさんの回答の方がスマートだとおもいます!!

摩訶不思議 1999/11/12(金) 16:21:07
なるほろ〜。
>yyyy = ( yy < 2000 ) ? "19" + yy : + yy ;
言われてみれば、2000年以降の条件では、文字列として処理はしてないですね。

>2000 + 11 + 12 = 2023 であっているのでは?
すいません。
足し算間違ってしまいました。(^_^;)

ぎんさんに教えていただいた方法
>yyyy = ( yy < 2000 ) ? "19" + yy : "" + yy ;

ちゃいパパさんに教えていただいた方法
>document.test.text1.value = yyyy.toString() + mm + dd ;

ともにうまく行きました!!
おかげさまで原因も分かり、スッキリしました。

#「Y2Kか?」な〜んて一瞬でも思ってしまった自分が恥ずかしい...

摩訶不思議 1999/11/12(金) 16:22:17
[[解決]]
おっと、解決マーク、解決マーク。

[上に] [前に] [次に]