我知道如何获取时区偏移量,但我需要的是能够检测“美国/纽约”之类的东西的能力。JavaScript甚至可能做到这一点吗?或者我将不得不根据偏移量来进行估计吗?
我知道如何获取时区偏移量,但我需要的是能够检测“美国/纽约”之类的东西的能力。JavaScript甚至可能做到这一点吗?或者我将不得不根据偏移量来进行估计吗?
Answers:
console.log(Intl.DateTimeFormat().resolvedOptions().timeZone)
请记住,在一些支持国际化API的旧版本浏览器上,该timeZone
属性设置为,undefined
而不是用户的时区字符串。据我所知,在撰写本文时(2017年7月),除IE11之外,所有当前浏览器都将以字符串形式返回用户时区。
获得最高支持的答案可能是获取时区的最佳方法,但是,Intl.DateTimeFormat().resolvedOptions().timeZone
按定义返回IANA时区名称,该名称为英文。
如果您想要使用当前用户语言的时区名称,则可以从Date
的字符串表示形式进行解析,如下所示:
function getTimezoneName() {
const today = new Date();
const short = today.toLocaleDateString(undefined);
const full = today.toLocaleDateString(undefined, { timeZoneName: 'long' });
// Trying to remove date from the string in a locale-agnostic way
const shortIndex = full.indexOf(short);
if (shortIndex >= 0) {
const trimmed = full.substring(0, shortIndex) + full.substring(shortIndex + short.length);
// by this time `trimmed` should be the timezone's name with some punctuation -
// trim it from both sides
return trimmed.replace(/^[\s,.\-:;]+|[\s,.\-:;]+$/g, '');
} else {
// in some magic case when short representation of date is not present in the long one, just return the long one as a fallback, since it should contain the timezone's name
return full;
}
}
console.log(getTimezoneName());
在Chrome和Firefox中进行了测试。
当然,这在某些环境中将无法正常工作。例如,node.js返回GMT偏移量(例如GMT+07:00
)而不是名称。但是我认为它仍然可以理解为后备。
PS不能像Intl...
解决方案一样在IE11中工作。
您可以使用此脚本。 http://pellepim.bitbucket.org/jstz/
在此处派生或克隆存储库。 https://bitbucket.org/pellepim/jstimezonedetect
包含脚本后,您可以在-中获取时区列表- jstz.olson.timezones
变量中。
以下代码用于确定客户端浏览器的时区。
var tz = jstz.determine();
tz.name();
享受jstz!
通过名称检索时区(即“美国/纽约”)
moment.tz.guess();
Intl.DateTimeFormat().resolvedOptions().timeZone
Intl.DateTimeFormat().resolvedOptions().timeZone
返回undefined
,但moment.tz.guess()
返回正确的值
您可以使用以下映射表简单地编写自己的代码:http : //www.timeanddate.com/time/zones/
或者,使用moment-timezone库:http : //momentjs.com/timezone/docs/
看到 zone.name; // America/Los_Angeles
或者,这个库:https : //github.com/Canop/tzdetect.js
试试这个代码从这里参考
<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js">
</script>
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/jstimezonedetect/1.0.4/jstz.min.js">
</script>
<script type="text/javascript">
$(document).ready(function(){
var tz = jstz.determine(); // Determines the time zone of the browser client
var timezone = tz.name(); //'Asia/Kolhata' for Indian Time.
alert(timezone);
});
</script>
在javascript中,Date.getTimezoneOffset()方法以分钟为单位返回当前语言环境相对于UTC的时区偏移量。
var x = new Date();
var currentTimeZoneOffsetInHours = x.getTimezoneOffset() / 60;
Moment'时区将是一个有用的工具。 http://momentjs.com/timezone/
在时区之间转换日期
var newYork = moment.tz("2014-06-01 12:00", "America/New_York");
var losAngeles = newYork.clone().tz("America/Los_Angeles");
var london = newYork.clone().tz("Europe/London");
newYork.format(); // 2014-06-01T12:00:00-04:00
losAngeles.format(); // 2014-06-01T09:00:00-07:00
london.format(); // 2014-06-01T17:00:00+01:00