spu*_*dly 43 javascript timezone date
我需要一种方法来检测给定日期对象的时区.我不想要偏移,也不想要完整的时区名称.我需要获得时区缩写.例如,GMT,UTC,PST,MST,CST,EST等......
这可能吗?我得到的最接近的是解析date.toString()的结果,但即使这样也不会给我一个缩写.它给了我时区的长名.
小智 58
原生解决方案:
var zone = new Date().toLocaleTimeString('en-us',{timeZoneName:'short'}).split(' ')[2]
console.log(zone)
Run Code Online (Sandbox Code Playgroud)
abs*_*nce 17
moment-timezone包含一个.zoneAbbr()
返回时区缩写的未记录方法.这还需要一组可根据需要选择和下载的规则.
这样做:
<script src="moment.js"></script>
<script src="moment-timezone.js"></script>
<script src="moment-timezone-data.js"></script>
<script>
moment().tz("America/Los_Angeles").zoneAbbr();
</script>
Run Code Online (Sandbox Code Playgroud)
返回:
'PDT' // As of this posting.
Run Code Online (Sandbox Code Playgroud)
Evan Czaplicki致力于为浏览器添加时区API的提案草案.
小智 16
[对不起我怎么写英文]
嗨,date对象没有获取时区abreviation的方法,但是在toString返回的几乎结束时它是隐含的:
例如
var rightNow = new Date();
alert(rightNow);
Run Code Online (Sandbox Code Playgroud)
输出将类似于"Wed Mar 30 2011 17:29:16 GMT-0300(ART)",因此,您可以隔离括号"ART"即时区缩写之间的内容
var rightNow = new Date();
alert(String(String(rightNow).split("(")[1]).split(")")[0]);
Run Code Online (Sandbox Code Playgroud)
输出将是"ART"
这是迟到的回答,但我希望它对某些人有用
Thi*_*key 14
您可以使用formatToParts
的方法Intl.DateTimeFormat
来获取短时区缩写。在世界某些地区,这可能会返回类似 的字符串"GMT+8"
,而不是实际时区名称的缩写。
let timeZone = new Intl.DateTimeFormat('en-us', { timeZoneName: 'short' })
.formatToParts(new Date())
.find(part => part.type == "timeZoneName")
.value
console.log(timeZone)
Run Code Online (Sandbox Code Playgroud)
这在Chrome,Firefox中完美运行,但仅限于IE11.在IE11中,没有直接缩写的时区如"印度Chagos时间"将返回"ICT"而不是正确的"IOT"
var result = "unknown";
try{
// Chrome, Firefox
result = /.*\s(.+)/.exec((new Date()).toLocaleDateString(navigator.language, { timeZoneName:'short' }))[1];
}catch(e){
// IE, some loss in accuracy due to guessing at the abbreviation
// Note: This regex adds a grouping around the open paren as a
// workaround for an IE regex parser bug
result = (new Date()).toTimeString().match(new RegExp("[A-Z](?!.*[\(])","g")).join('');
}
console.log(result);
Run Code Online (Sandbox Code Playgroud)
结果:
"CDT"
Run Code Online (Sandbox Code Playgroud)
使用来自的内容new Date().toString()
const timeZoneAbbreviated = () => {
const { 1: tz } = new Date().toString().match(/\((.+)\)/);
// In Chrome browser, new Date().toString() is
// "Thu Aug 06 2020 16:21:38 GMT+0530 (India Standard Time)"
// In Safari browser, new Date().toString() is
// "Thu Aug 06 2020 16:24:03 GMT+0530 (IST)"
if (tz.includes(" ")) {
return tz
.split(" ")
.map(([first]) => first)
.join("");
} else {
return tz;
}
};
console.log("Time Zone:", timeZoneAbbreviated());
// IST
// PDT
// CEST
Run Code Online (Sandbox Code Playgroud)
小智 5
我只用了片刻就实现了这一目标。
moment.tz(moment.tz.guess()).zoneAbbr() //IST
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
47965 次 |
最近记录: |