Moment Timezone返回正确的时区,但拼写错误

时间:2018-07-08 13:07:36

标签: javascript momentjs

我正在使用MomentJS时区。但是,当我执行moment.tz.guess()时,它将以错误的拼写返回我的时区。

const timezone = moment.tz.guess();
console.log(timezone); //returns Asia/Katmandu instead of Asia/Kathmandu

是的,我可以编辑js文件并更正拼写,但恐怕其他国家/地区也一样。由于我不会意识到这一点,因此可能会降低用户体验!

此行为是预期的还是有解决方法?

请参阅: Correct Timezone List [Moment] [Javascript] [PHP] [Internationalization API]

2 个答案:

答案 0 :(得分:1)

我正在使用时刻2.2.22和0.5.17数据,这是我发现的结果。

var timezones = moment.tz.names();
console.log(moment.tz.guess());
for (var i = 0; i < timezones.length; i++) {
  var node = document.createElement("LI");
  var textnode = document.createTextNode(timezones[i]);
  node.appendChild(textnode);
  document.getElementById("mm").appendChild(node);

}
#mm span {
  width: 100%;
}
<script src="https://momentjs.com/downloads/moment.min.js"></script>
<script src="http://momentjs.com/downloads/moment-timezone-with-data.min.js"></script>
<ul id='mm'></ul>

我的结果显示,同一时区有两个名称(加德满都和加德满都),它们的写法像Asia/Kathmandu|Asia/Katmandu(一个更新的第二个已过时)。经过一些研究后,我发现这是因为时区和chrome行为过时,在Firefox或任何其他浏览器上都不会发生此问题。

开发人员也不会解决此问题,因为这不会造成任何问题。这是已知的Chrome行为,会导致Moment做出错误的猜测。 Moment开发团队对开发解决方法不感兴趣。可以找到更多信息here

因此,我建议您使用字符串并根据需要设置其格式并在上一个答案中提出建议。

注意

请同时在其他浏览器中测试该示例。

答案 1 :(得分:0)

请参见此post,为什么结果会有所不同。 如果获得结果Asia/Katmandu,则返回值为Asia/Kathmandu

//for kathmandu, it returns Asia/Katmandu(chrome)
//returns Asia/Kathmandu (firfox);
var timeZone = Intl.DateTimeFormat().resolvedOptions().timeZone;
if(timeZone === 'Asia/Katmandu'){
  timeZone = 'Asia/Kathmandu';
}
console.log(timeZone);

MomentJs DEMO

var timeZone = moment.tz.guess();
if(timeZone === 'Asia/Katmandu'){
  timeZone = 'Asia/Kathmandu';
}
console.log(timeZone);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.js" charset="utf-8"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.21/moment-timezone-with-data.js"></script>