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



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

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

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

这种行为是预期的还是有办法解决的?

看这个:正确的时区列表 [时刻] [Javascript] [PHP] [国际化API]

我使用的是矩 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开发团队对开发解决方法不感兴趣。更多信息可以在这里找到。

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

注意

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

请参阅这篇文章,为什么结果不同。 如果您得到的结果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 演示

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>

最新更新