1cco
1/12/2018 - 11:43 AM

setTimezoneOffset

指定された日時のタイムゾーンを擬似的に設定します。

/**
 * setTimezoneOffset() メソッドは、指定された日時のタイムゾーンを擬似的に設定し
 *     ます。設定後の時刻のタイムゾーンは、元の時刻のタイムゾーンのものと同じで
 *     す。
 * @param {String} offsetString タイムゾーンオフセットを表す "+0900" や 
 *     "-0430" のような5文字の文字列。4文字の数字からなる "0600" のような文字列
 *     が与えられた場合は先頭に"+"を付け加えてから処理を行います。
 * @return {Number} 協定世界時 (UTC) 1970 年 1 月 1 日 00:00:00 から更新された
 *     日時までの間のミリ秒単位の数値。
 */

if (!Date.prototype.setTimezoneOffset) {
    Date.prototype.setTimezoneOffset = function (offsetString) {
        if (offsetString.length < 4) {
            return;
        }
        if (offsetString.length === 4) {
            if (!isNaN(parseInt(offsetString.charAt(0)))) {
                offsetString = "+" + offsetString;
            }
            else {
                return;
            }
        }
        var sign = offsetString.substr(0, 1);
        var hour = parseInt(sign + offsetString.substr(1, 2));
        var offset = hour * 60 + parseInt(sign + offsetString.substr(3, 2));
        var utc = new Date(this.getTime() + this.getTimezoneOffset() * 60 * 1000);
        return this.setTime(utc.getTime() + offset * 60 * 1000);
    };
}

// 使用例
var now = new Date(); //地方時
console.log('loc',now);
var jstTime = now.setTimezoneOffset('+0900'); //jst
console.log('jst',now);
var pdtTime = now.setTimezoneOffset('-0700'); //pdt
console.log('pdt',now);