JavaScriptで指定タイムゾーンの時刻を得る
一瞬ハマったので、メモ。
JavaScriptのDateオブジェクトで、UTCともローカルとも違うタイムゾーンで現在時刻を表示させる方法。
まずは結論から先に。こうしたらいい。
var timezoneoffset = -9 // UTC-表示したいタイムゾーン(単位:hour)。JSTなら-9
var fakeUTC = new Date(Date.now() - (timezoneoffset * 60 - new Date().getTimezoneOffset()) * 60000);
// fakeUTCに対して、getFullYear(), getMonth(), getDate(), getHours(), getMinutes(), getSeconds()を使えば、timezoneoffsetで指定したタイムゾーンで時刻取得ができる。以下は利用例。
var year = fakeUTC.getFullYear();var month = fakeUTC.getMonth();
var date = fakeUTC.getDate();
var hour = fakeUTC.getHours();
var min = fakeUTC.getMinutes();
var second = fakeUTC.getSeconds();
そもそもなんでこんな面倒なことをしなければならないかというと、DateオブジェクトがUTCまたはローカルタイムしか扱えないからだ。そのため、たとえばインドのPCで実行したときにJSTで時刻表示させるということが、そのままでは出来ない。
上で示したハックは、これを解決するために、Dateインスタンスのもつ値を UTC-(ローカルのタイムゾーン-取得したいタイムゾーン) にセットすることで、getDate() 等の戻り値を取得したいタイムゾーンにするというものだ。