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] Tweet ■今年は2024年!? 10月のJavaScriptの反乱2014年10月 2日(木) 0:00:00 [さくらのブログから転記] |
RSS配信中 | |
自作の、自分向けに作ったJavaScriptのシステムのお話。 昨日、10月1日になったとたんに、現在日付が 2024年の1月だとか、ほざきくさりはじめやがったんですね。 昨日までは2014年の9月だと言っていたのに。突然。 まず最初に、自分のPCのマシン日付を疑ったのですが、問題なく2014年10月1日を指しておりました。 次に、Firefoxでおかしなアップデートでもあったのではないか?と思ったのですが、IEやSafariでも同現象が起きていますし、そもそも今日になってFirefoxをアップデートしたりなんかしていないし。 となると、JavaScriptで作った自作スクリプトの不良ですよね。 ちなみに、その部分は次のようなコーディングになっています。 d = new Date(); 現在日付時刻を取得し、それを 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; 足し合わせる最初の時点で、文字列に強制的に変換できるようにしました。 これで、思い通りの文字列化ができるようになりました。 目次の表示: ブログではないので、コメント機能とトラックバック機能は提供していません。ご質問・ご意見等はメール、フィードバックまたはTwitter等からお願いします。いただいたご質問・ご意見などは、この「管理人のひとこと」の記事に追加、あるいは新規の記事にする形で一部または全文をそのまま、あるいは加工させていただいた上で、ご紹介させていただく場合があります。 当サイトでは掲載内容による不具合等に関する責任を持ちません。また、内容の正確性についての保証もありませんので、情報をご利用の際は、利用者の自己責任で確認をお願いします。 |
- 最近の更新 - |
|
3212952 (+0016)[+0285] Copyright© 2010-2024 INASOFT |