INASOFT 管理人のひとこと


フリーソフトダウンロードサイト「INASOFT」の管理人 矢吹拓也 が日々の「ひとこと」を語るページです。
2021年1月1日より、旧ブログ(blog.inasoft.org)からお引越ししました。
・INASOFT Webサイト: https://www.inasoft.org/
・管理人のふたこと(長文記事/寄稿文): https://www.inasoft.org/talk/
本業の方のお仕事が再び忙しくなりつつあるので、断続的にしばらく更新が止まることがあります。

目次 | ←前へ / 2013-05-18 00:00 / 次へ→ / 最新へ⇒

■JavaScriptで「1時間後」を求めたかった。

2013/ 5/18 0:00:00


RSSRSS配信中

https://www.inasoft.org/








ちょっと手元で使いたいブラウザツールがありまして、次のようなことをしたいと思いました。

・現在日時を yyyyMMDDHH 形式で表示する。
 (2013/5/17 05:39:10 ならば、 "2013051705" と表記する)
・その1時間後を求め、その表記にする。
 (つまり、"2013051706" とする)

JavaScriptで、これをお気軽に行う方法は、どのようなものになるか。

乗り越えるべき課題は2つ。

・JavaScriptで「1時間後」を求める方法。なるべくスマートに。
・JavaScriptで「ゼロパディング2桁」の数値を文字列で表示する方法。なるべくスマートに。

ネットで検索したところ、1時間後を求める方法はいくつかあるみたいですね。
代表的なものとしては、汎用的な時間計算方法として、setTime/getTime を使う方法。
これは、1ミリ秒単位の数値としてDate型の値を保持するので、「1時間後」を求めたいなら、

 d = new Date();
 d.setTime(d.getTime()+1*60*60*1000);

とでもやればよいのかな。

でもまぁ、わざわざミリ秒単位で計算しなくても「時」の単位だけ編集すれば良いので、次のような書き方が一番スマートだろうか。

 d.setHours(d.getHours()+1);



これならば、例え「24時」とか「25時」みたいな表記が現れてしまっても、自動的に「翌日の0時」「翌日の1時」に補正してもらえる。ここらへん、最新の言語バンザイって感じ。
(JavaScriptは最新の言語じゃないけど……。オッサンでごめんなさい)

次に、「ゼロパティング2桁」(1を"01"と表記する等)を実現する方法。
これは、ググるといくつか手法が出てきますね。一番スマートだと思ったのは、文字列として左に"0"を付加したものについて、右からsubstring的な方法で2文字取ってくる方法。
これならば、

 「1」⇒左に"0"を付加⇒「"01"」⇒うしろから2文字取得⇒「"01"」完成
 「12」⇒左に"0"を付加⇒「"012"」⇒うしろから2文字取得⇒「"12"」完成

といった感じで、みごとにゼロパティング2桁が完成するわけで。
以上をまとめると、目的を達成するためのJavaScriptは、次のようになるでしょうか。

 d = new Date();
 d.setHours(d.getHours()+1);
 form1.yyyymmddhh.value
= "" + d.getFullYear() + ("0"+(d.getMonth()+1)).slice(-2) +
("0"+d.getDate()).slice(-2) + ("0"+d.getHours()).slice(-2);

あ、getMonthが、0~11の値をとるというのは有名な注意事項ですね。
あと、getFullYear() は、古いブラウザではサポートされていないので注意が必要。ここらへんも有名な注意事項かな。


目次 | ←前へ / 2013-05-18 00:00 / 次へ→ / 最新へ⇒


目次の表示:


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




2555457 (+0062)[+0539]

Copyright© 2010-2021 INASOFT