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
[[解決]]
おっと、解決マーク、解決マーク。
[上に]
[前に]
[次に]