我正在开发一个应用程序,它检测浏览器的时区并要求用户将时区设置为浏览器检测到的值。
因此,我填充了一个选择下拉列表,其中列出了 ActiveSupport::TimeZone::MAPPING 中存在的所有键。
现在,我有一个用户的时区是 (GMT-08:00) Pacific/Pitcairn。ActiveSupport::TimeZone 中不存在许多这样的值。
我应该如何处理这些价值观。我检查了许多声称发送 Rails Supported Values 的 js 文件,但它们似乎都不起作用。
如果我在 Windows 机器中将时区设置为 UTC-08:00,那么我的 javascript 插件会检测到时区并发送美国/洛杉矶的值。
我们有一个复选框,不允许在 Windows 机器上使用 DST 计时。因此,在这种情况下,以 UTC-08:00 作为时区并且未选中 DST 框,我们将得到一个值 Pacific/Pitcairn。
因此,在 America/Los Angeles 和 Pacific/Pitcairn 的两个不同值之前/之前进行匹配是不可能的。
通过 UTC 偏移量设置值,忽略名称也无济于事。对于蒂华纳,我们有两个单独的值,即 (UTC-08:00) 太平洋时间(美国和加拿大)和 (UTC-08:00)。那么我如何决定设置哪个值。
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 浏览器