2

私は、ブラウザのタイムゾーンを検出し、タイムゾーンをブラウザが検出した値に設定するようにユーザーに要求するアプリケーションに取り組んでいます。

そこで、ActiveSupport::TimeZone::MAPPING に存在するすべてのキーをすべてリストする選択ドロップダウンを作成しました。

現在、タイムゾーンが (GMT-08:00) Pacific/Pitcairn のユーザーがいます。ActiveSupport::TimeZone には存在しない値が多数あります。

そのような値をどのように処理すればよいですか。Railsでサポートされている値を送信すると主張する多くのjsファイルをチェックしましたが、どれも機能していないようです。

Windows マシンでタイムゾーンを UTC-08:00 に設定すると、JavaScript プラグインがタイム ゾーンを検出し、America/Los Angeles の値を送信します。

Windows マシンで DST タイミングを許可しないチェック ボックスがあります。したがって、この場合、タイム ゾーンとして UTC-08:00 を使用し、DST ボックスのチェックを外して、値 Pacific/Pitcairn を取得しています。

そのため、America/Los Angeles と Pacific/Pitcairn の 2 つの異なる値の前に / を一致させることはできません。

名前を無視してUTCオフセットで値を設定しても役に立ちません。(UTC-08:00) 太平洋時間 (米国およびカナダ) と (UTC-08:00) のティファナの 2 つの個別の値があります。では、どの値を設定するかをどのように決定すればよいでしょうか。

showTimeZoneInfo: function(member_time_zone, timeZoneInfo, invertTZHash){
  var tzValue = jQuery().get_timezone({'defaultvalue' : 'Etc/UTC'});
  var railsOffset = TimeZoneFlash.extractOffset(timeZoneInfo[member_time_zone]);
  var browserOffset = TimeZoneUtils.zoneWithoutDST();
  if ( railsOffset != browserOffset) {
    jQuery(".time_zone_text").text(browserOffset + " " + invertTZHash[tzValue]);
    jQuery('.cjs_display_time_zone').removeClass('hide');
  }
}

ここで、invertTZHash に Pacific/Pitcairn が含まれていないケースがあります。そして、未定義の値を返します。

ブラウザのタイムゾーンとは異なるタイムゾーンにいるユーザー向けの警告ボックスの構築に取り組んでいます。Intl.DateTimeFormat().resolved.timeZone でさえ、ほとんどのトラフィックは IE および FF ブラウザーからのものであるため、役に立ちません。

4

2 に答える 2

-1

最初のオプション: UTC オフセットで設定

  1. UTC オフセットを取得する
  2. Ruby 配列で UTC オフセットを検索します。
  3. UTC オフセットで値を設定し、名前を無視します。正しい UTC オフセットを持つ最初のタイムゾーンを選択します。

このためのいくつかのコード:

timezone = ActiveSupport::TimeZone.all.select { |tz| tz.utc_offset == my_offset }.first

2 番目のオプション: 新しいタイムゾーンをリストに追加する

UTC オフセットがわかっている場合は、newTimeZone をリストに追加します。ドキュメント を参照してください

それが役立つことを願っています!

于 2013-08-21T11:32:56.940 に答える