gpt4 book ai didi

javascript - `Intl.toLocaleTimeString` 的英国区域设置的短格式和长格式的行为不一致

转载 作者:行者123 更新时间:2023-11-29 19:46:40 27 4
gpt4 key购买 nike

假设欧洲(英国)区域设置日期格式在月份和年份之前使用 天数,如下所示:

EEE, dd MMM yyyy

当我在带有选项 weekday= short 的 toLocaleTimeString 中使用它时,我得到不一致的响应。月后有几天。

Fri, Sep 27, 2013 18:38:30 United Kingdom Time

但是,当我使用 weekday=long 时,它将与预期的日期格式一致。

Friday, 27 Sep 2013 18:38:30 United Kingdom Time

无论是使用短格式还是长格式,我都认为它应该是一致的,并且日期在月份之前。但是,情况并非如此,我不确定这是期望的行为还是我遗漏了一些要点?

这是 Chrome V29 中的 JavaScript 代码:

    var options = {
hour: "2-digit",
minute: "2-digit",
second: "2-digit",
year: "numeric",
month: "short",
day: "2-digit",
hour12: false,
timeZoneName: "short",

weekday:"short" //"long"
}

var date = new Date("Fri Sep 27 2013 13:38:30 GMT-0400");
options.timeZone = 'America/New_York'
console.log(date.toLocaleDateString("en-us",options))

options.timeZone = 'Europe/London'
console.log(date.toLocaleDateString("en-gb",options))

输出:

with weekday= short

Fri, Sep 27, 2013 1:38:30 PM ET
Fri, Sep 27, 2013 18:38:30 United Kingdom Time

with weekday= long

Friday, Sep 27, 2013 1:38:30 PM ET
Friday, 27 Sep 2013 18:38:30 United Kingdom Time

预期:

Fri, Sep 27, 2013 1:38:30 PM ET
Fri, 27 Sep 2013 18:38:30 United Kingdom Time

最佳答案

可以省略 options 中的 year 并正确获取日-月格式,但是没有 year 的日期字符串显然不好值:

var options = {
hour: "2-digit",
minute: "2-digit",
second: "2-digit",
//year: "numeric",
month: "short",
day: "2-digit",
hour12: false,
timeZoneName: "short",

weekday:"short"
}

返回:

Fri, Sep 27 1:38:30 PM ET
Fri 27 Sep 18:38:30 United Kingdom Time

所以这是一个临时的解决方法,直到我们找出这是怎么回事;您可以为 en-GB 单独设置 weekday 以获得所需的结果,但您最终会得到很长的工作日名称:

var options = {
hour: "2-digit",
minute: "2-digit",
second: "2-digit",
year: "numeric",
month: "short",
day: "2-digit",
timeZoneName: "short",
weekday: "short"
}

var date = new Date("Fri Sep 27 2013 13:38:30 GMT-0400");
options.timeZone = "America/New_York";
console.log(date.toLocaleDateString("en-US",options));

options.timeZone = "Europe/London";
options.weekday = "long";
console.log(date.toLocaleDateString("en-GB",options));

返回:

Fri, Sep 27, 2013 1:38:30 PM ET
Friday, 27 Sep 2013 18:38:30 United Kingdom Time

我仍在努力寻找造成这种情况的原因。这似乎不是 ICU 问题,它返回两个语言环境的预期值(参见 en-GBen-US 的结果)。可能是要求使用短工作日名称 year 的格式会导致 format matcher回到 en (使用 E, MMM d y )。找出这是否是一个缺陷,需要更多的调查。如果我发现了,我会在这里更新。

一个关于显式设置 hour12 的小提示。考虑到它的默认值为 locale-dependent ,我认为最好也将其省略(正如您在 en-GB 的输出时间格式中看到的那样,它已被覆盖)。

关于javascript - `Intl.toLocaleTimeString` 的英国区域设置的短格式和长格式的行为不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19060105/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com