以下に公開されているものはすべて、当社独自の開発の結果です
var now = new Date(); 関数SheckDLT(sm、em) { return((新しい日付(em))。getTimezoneOffset()-(新しい日付(sm))。getTimezoneOffset()); } 関数getTZLowerBound(開始、終了、cmp) { var nstart、count、count2; count = end-start; while(count> 0) { end = start + count; nstart = start +(count2 = Math.floor(count / 2)); if(cmp(CheckDLT(nstart、end))) { start = nstart + 1; カウント-= count2 + 1; } 他に count = count2; } return [start、-(新しい日付(開始))。getTimezoneOffset()]; } var dlt = Date.UTC(now.getFullYear()、0、1、0、0、0、0)、 std = Date.UTC(now.getFullYear()、6、1、0、0、0、0); if(SheckDLT(dlt、std)) { dlt = getTZLowerBound(dlt、std、function(b){return(b <0)}); std = getTZLowerBound(Date.UTC(now.getFullYear()、6、1、0、0、0、0)、 Date.UTC(now.getFullYear()、11、1、0、0、0、0)、 function(b){return(b> 0)}); dlt [0] = dlt [0] + std [1] * 60000; std [0] = std [0] + dlt [1] * 60000; } 他に std = dlt = [0、-now.getTimezoneOffset()];
これは、このコードの実行結果です。 出力では、2つの配列dltとstdを取得します。 最初のものには夏時間への移行点に関するデータが含まれ、2番目には標準へのデータが含まれます。 各配列の最初の要素は、現地時間での移行ポイントのタイムスタンプであり、2番目の要素は、移行後のGMTに対するオフセットです。 クライアントのタイムゾーンに夏時間がない場合、両方の配列の最初の要素はゼロになり、2番目の要素はGMTオフセットになります
もちろん、これらのデータに基づいて、現時点では多くの交差点があるため、クライアントのタイムゾーンを明確に決定することはできませんが、過去には矛盾があります。 それでも、自動時間変換に使用する場合、これで十分です。