如何从toTimeString()返回结果中移除时间部分?
嗨,看到你最后用substring方法简化代码搞定了问题,真不错!刚好我可以给你梳理几种不同的实现思路,方便以后遇到类似场景参考~
先回顾下你的场景:
你原本用这段代码:
var d = new Date(); var region = "**Region** - `" + d.toTimeString();
得到的结果是:
**Region** - `09:39:43 GMT+1000 (AUS Eastern Standard Time)`
想要移除前面的时分秒部分,只保留GMT+1000 (AUS Eastern Standard Time)这部分内容。
1. 你现在用的substring方法(最简洁高效)
因为toTimeString()返回的格式是固定的,时分秒后必然跟着空格,后面就是时区信息。所以直接找到第一个空格的位置,截取后面的内容就行:
var d = new Date(); var timeStr = d.toTimeString(); // 定位第一个空格,截取其后的所有内容 var timezonePart = timeStr.substring(timeStr.indexOf(' ') + 1); var region = "**Region** - `" + timezonePart;
运行后就能得到你想要的结果:
**Region** - `GMT+1000 (AUS Eastern Standard Time)`
这种方法完全不需要复杂逻辑,确实是最适合你的方案。
2. 之前提到的正则表达式方法
如果想用正则来实现,也有几种写法:
- 匹配第一个空格之后的所有内容:
var d = new Date(); var timeStr = d.toTimeString(); var timezonePart = timeStr.match(/\s(.*)/)[1]; var region = "**Region** - `" + timezonePart;
- 更精准地匹配GMT开头的部分:
var timezonePart = timeStr.match(/GMT.*$/)[0];
这两种正则方式也能达到效果,但确实不如substring简洁。
3. 进阶:直接获取时区信息
如果你以后需要更灵活地处理时区,还可以试试这些方法:
- 获取时区偏移量:
d.getTimezoneOffset(),不过注意这个返回的是与UTC的分钟差,符号和GMT标注相反(比如GMT+1000对应返回-600),需要转换后再拼接格式。 - 获取时区名称:部分浏览器支持
d.toLocaleTimeString('en', {timeZoneName: 'long'}),但返回格式可能因浏览器不同有差异,需要额外处理。
不过对你当前的需求来说,substring方法已经足够完美啦!
内容的提问来源于stack exchange,提问作者Sean
相关产品推荐
相关产品推荐

