[言語別TIME処理] Javascriptで時間処理

2017年4月24日

Javascript テクノロジー プログラミング 特集

WEBサービスを構築する際に、時間に関する処理を度々コーディングした記憶があります。 主に、ログファイルを作る時のタイムスタンプだったり、ユーザー識別子を作る為のアクセスタイムの取得を行ったり一定時間の処理や、特定日時にイベント起動するような処理なども、date関数などで行います。 そして、サーバーサイドのPHPなどと同じ処理を行う場合など、時間関連の処理をローカライズしたりすることもあるので、言語別に時間処理をまとめておきたかったので、メモブログしたいと思います。

要件

今回のプログラムは以下のような内容で処理を書いておきます。 ※これだけやっておけば大体の処理は行えると思います。
  1. 1900年からの秒数
  2. sleep処理
  3. 1番からYmdHisの取得(曜日)
  4. YmdHisから1番の取得
  5. ミリ秒の取得
  6. GMTの取得
  7. 本プログラムの経過秒数

ソースコード

;(function(){ var $$ = function(){}; $$.prototype.getTime = function(){ return (+new Date()); }; /** * Sleep Excution * @time : micro-second */ $$.prototype.sleep = function(time){ if(!time){return} var st = this.getTime(); while(this.getTime() - st < time){} }; // start-time var start = $$.prototype.getTime(); console.log("start : " + start + "s"); // sec2datetime var now = new Date(start); var y = now.getFullYear(); var m = now.getMonth()+1; var d = now.getDate(); var w = now.getDay(); var h = now.getHours(); var i = now.getMinutes(); var s = now.getSeconds(); var week = ["日","月","火","水","木","金","土"]; console.log("secConvert : "+ y+"年"+m+"月"+d+"日 "+week[w]+"曜日 "+h+"時"+i+"分"+s+"秒"); var microSeconds = now.getMilliseconds(); console.log("MicroSeconds : " + microSeconds); // GMT値の取得( +0900) var gmt = now.getTimezoneOffset() * 6000 / 60 / 60 * -1; console.log("GMT : "+ gmt); // ymdhis2dateObject (month , date , year , hour : minute : second , GMT) var desination = new Date("06 01 2012 00:00:00 +0900"); console.log("timeFormat : "+desination); // sleep console.log("sleep : start"); $$.prototype.sleep(5000); console.log("sleep : end"); // end-time & Passage-time var end = $$.prototype.getTime(); console.log("end : " + end + "s"); console.log("passage : " + (end - start) + "s"); })();

実行

start : 1492844887714s secConvert : 2017年4月22日 土曜日 16時8分7秒 MicroSeconds : 714 GMT : 900 timeFormat : Fri Jun 01 2012 00:00:00 GMT+0900 (JST) sleep : start sleep : end end : 1492844892715s passage : 5001s

解説

指定日の秒数を取得

2017年1月1日0時0分0秒というような秒数を取得して、一定期間を算出したい場合などは以下のように行います。 var now = new Date("01 01 2017 00:00:00 +0900"); var y = now.getFullYear(); var m = now.getMonth()+1; var d = now.getDate(); var w = now.getDay(); var h = now.getHours(); var i = now.getMinutes(); var s = now.getSeconds(); GMTは入れても入れなくてもいいようです。 あと、上記フォーマットじゃなく、秒数指定でもできるようです。(1900年からの秒数)

1日後の取得

date関数は秒数で管理するのが都合がいいので、1日も秒数で考えましょう。 # 1日 = 60秒 x 60分 x 24時間 console.log(60*60*24); > 86400 2日や3日は、上記に日数をかけ合わせて使用しましょう。

キャッシュ防止の為のdatetimeの高速化

外部読み込みファイルのクエリにdatetimeを付けることで、ブラウザのローカルキャッシュを防止することができます。 var tag = "<img src='hoge.png?"+(+new Date())+"'/>"; JSで読み込みタグを作成する場合、CSSやJSや画像などがこの処理でキャッシュ防止できます。 ポイントは、(+new Date())とすると var dt = new Date(); と変数に入れるよりも高速に処理がされて、秒数がセットされる為、非常に便利です。

このブログを検索

ごあいさつ

このWebサイトは、独自思考で我が道を行くユゲタの少し尖った思考のTechブログです。 毎日興味がどんどん切り替わるので、テーマはマルチになっています。 もしかしたらアイデアに困っている人の助けになるかもしれません。