使用Moment.js UTC偏移量过滤时区数组返回空数组的问题
问题描述
我有时区数组如下:
{name: '(UTC) Coordinated Universal Time', offset: '00:00:00', id: 'UTC'} {name: '(UTC+00:00) Dublin, Edinburgh, Lisbon, London', offset: '00:00:00', id: 'GMT Standard Time'} {name: '(UTC+03:00) Istanbul', offset: '03:00:00', id: 'Turkey Standard Time'} {name: '(UTC+04:00) Astrakhan, Ulyanovsk', offset: '04:00:00', id: 'Astrakhan Standard Time'}
我尝试用以下代码根据指定UTC偏移量过滤该数组:
this.timezones.filter(x=> moment().utcOffset(x.offset).utcOffset() == '240')
其中240分钟对应数组中的“04:00:00”偏移量,预期返回结果为:
{name: '(UTC+04:00) Astrakhan, Ulyanovsk', offset: '04:00:00', id: 'Astrakhan Standard Time'}
但实际返回空数组,请问我哪里出错了?
问题原因及解决方法
核心问题
- 类型不匹配:
moment().utcOffset()返回的是数字类型的分钟数,而你用字符串'240'做相等判断,类型不一致导致匹配失败。 - 可选优化点:虽然moment可以解析
'04:00:00'格式,但手动转换偏移字符串为分钟数,能避免潜在的解析异常,逻辑更可控。
修正方案
方案一:统一类型,用数字比较
直接把判断值改成数字240,和utcOffset()返回的数字类型匹配:
this.timezones.filter(x => moment().utcOffset(x.offset).utcOffset() === 240)
方案二:手动转换偏移字符串为分钟数(更可靠)
自己拆分偏移字符串计算总分钟数,再和目标值对比:
this.timezones.filter(x => { const [hours, minutes] = x.offset.split(':').map(Number); const totalMinutes = hours * 60 + minutes; return totalMinutes === 240; })
内容的提问来源于stack exchange,提问作者deanpillow
相关产品推荐
相关产品推荐

