INASOFT 管理人のひとこと


フリーソフトダウンロードサイト「INASOFT」の管理人 矢吹拓也 が日々の「ひとこと」を語るページです。
2021年1月1日より、旧ブログ(blog.inasoft.org)からお引越ししました。
・INASOFT Webサイト: https://www.inasoft.org/
・管理人のふたこと(長文記事/寄稿文): https://www.inasoft.org/talk/
2022年7月下旬より再び本業多忙化してきているため、更新頻度は落ちます。 [2022/7/24 19:32]

目次 | ←前へ / 2014-10-02 00:00 / 次へ→ / 最新へ⇒

■今年は2024年!? 10月のJavaScriptの反乱

2014年10月 2日(木) 0:00:00 [さくらのブログから転記]



RSSRSS配信中
https://www.inasoft.org/



自作の、自分向けに作ったJavaScriptのシステムのお話。

昨日、10月1日になったとたんに、現在日付が 2024年の1月だとか、ほざきくさりはじめやがったんですね。

昨日までは2014年の9月だと言っていたのに。突然。

まず最初に、自分のPCのマシン日付を疑ったのですが、問題なく2014年10月1日を指しておりました。
次に、Firefoxでおかしなアップデートでもあったのではないか?と思ったのですが、IEやSafariでも同現象が起きていますし、そもそも今日になってFirefoxをアップデートしたりなんかしていないし。

となると、JavaScriptで作った自作スクリプトの不良ですよね。

ちなみに、その部分は次のようなコーディングになっています。


    d  = new Date();
    YYYY = d.getFullYear();
    MM = d.getMonth() + 1;
    DD = d.getDate();
    hh = d.getHours();
    mm = d.getMinutes();
    ss = d.getSeconds();
    if(MM < 10){ MM = "0" + MM; }
    if(DD < 10){ DD = "0" + DD; }
    if(hh < 10){ hh = "0" + hh; }
    if(mm < 10){ mm = "0" + mm; }
    if(ss < 10){ ss = "0" + ss; }
    document.getElementById('posttime').value = YYYY + MM + DD + hh + mm + ss;



現在日付時刻を取得し、それを yyyyMMddHHmmss形式の文字列に変換し、INPUTエリアの「posttime」に格納するためのスクリプトです。

この中で、月・日・時・分・秒が1桁だったら、文字 "0" を数字の左側に補って、数字2桁にする仕掛けがあるのですが、どうやらコレが悪さして、問題の表面化を妨げていたようです。

JavaScriptでは、暗黙の型変換が存在します。

文字列+数値は、文字列になります。例えば、 "ABC" + 123 → "ABC123"
数値+数値は、数値になります。例えば、 456 + 123 → 579

これまでは9月でしたから、 MM = "0" + MM が動いていました。9月なら、 MM = "0"(文字列) + 9(数値) → "09"(文字列) といった具合ですね。
ところが10月になり、MM = "0" + MM のロジックを通過しなくなりました。MM = 10(数値) のままになったんですね。

なので、YYYY = 2014(数値) と MM = 10(数値) を足して、2024(数値) となってしまったというわけです。
その後の日(DD)は、昨日の時点ではまだ1桁ですから、 "0" + DD が働いて文字列化されました。

昨日の例だと、DD=1 ということで、DD = "0"(文字列) + 1(数値) → "01"(文字列)となり、2024(数値) + "01"(文字列) → "202401"(文字列) という文字列ができあがったわけですね。

解決策として、以下のようにしました。



document.getElementById('posttime').value = YYYY + MM + DD + hh + mm + ss;
                   ↓
document.getElementById('posttime').value = "" + YYYY + MM + DD + hh + mm + ss;


足し合わせる最初の時点で、文字列に強制的に変換できるようにしました。
これで、思い通りの文字列化ができるようになりました。








目次 | ←前へ / 2014-10-02 00:00 / 次へ→ / 最新へ⇒


目次の表示:


ブログではないので、コメント機能とトラックバック機能は提供していません。ご質問・ご意見等はメールフィードバックまたはTwitter等からお願いします。いただいたご質問・ご意見などは、この「管理人のひとこと」の記事に追加、あるいは新規の記事にする形で一部または全文をそのまま、あるいは加工させていただいた上で、ご紹介させていただく場合があります。
当サイトでは掲載内容による不具合等に関する責任を持ちません。また、内容の正確性についての保証もありませんので、情報をご利用の際は、利用者の自己責任で確認をお願いします。本ページは公開から1年半後の任意のタイミングで削除される予定です。


- 最近の更新 -



3212952 (+0016)[+0285]

Copyright© 2010-2024 INASOFT