WEBサービスを構築する際に、時間に関する処理を度々コーディングした記憶があります。
主に、ログファイルを作る時のタイムスタンプだったり、ユーザー識別子を作る為のアクセスタイムの取得を行ったり一定時間の処理や、特定日時にイベント起動するような処理なども、date関数などで行います。
そして、サーバーサイドのPHPなどと同じ処理を行う場合など、時間関連の処理をローカライズしたりすることもあるので、言語別に時間処理をまとめておきたかったので、メモブログしたいと思います。
要件
今回のプログラムは以下のような内容で処理を書いておきます。
※これだけやっておけば大体の処理は行えると思います。
- 1900年からの秒数
- sleep処理
- 1番からYmdHisの取得(曜日)
- YmdHisから1番の取得
- ミリ秒の取得
- GMTの取得
- 本プログラムの経過秒数
ソースコード
;(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();
と変数に入れるよりも高速に処理がされて、秒数がセットされる為、非常に便利です。
0 件のコメント:
コメントを投稿