mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-11-22 15:40:19 +00:00
LibJS+LibUnicode: Handle flexible day periods that roll over midnight
When searching for the locale-specific flexible day period for a given hour, we were neglecting to handle cases where the period crosses 00:00. For example, the en locale defines a day period range of [21:00, 06:00). When given the hour of 05:00, we were checking if (21 <= 5 && 5 < 6), thus not recognizing that the hour falls in that period.
This commit is contained in:
parent
c8addf1a5e
commit
ec7d5351ed
Notes:
sideshowbarker
2024-07-18 00:34:07 +09:00
Author: https://github.com/trflynn89 Commit: https://github.com/SerenityOS/serenity/commit/ec7d5351ed0 Pull-request: https://github.com/SerenityOS/serenity/pull/11640
2 changed files with 16 additions and 2 deletions
|
@ -2043,9 +2043,15 @@ Optional<StringView> get_calendar_day_period_symbol_for_hour(StringView locale,
|
|||
auto day_periods = s_day_period_lists[day_periods_index];
|
||||
|
||||
for (auto day_period_index : day_periods) {
|
||||
auto const& day_period = s_day_periods[day_period_index];
|
||||
auto day_period = s_day_periods[day_period_index];
|
||||
auto h = hour;
|
||||
|
||||
if ((day_period.begin <= hour) && (hour < day_period.end)) {
|
||||
if (day_period.begin > day_period.end) {
|
||||
day_period.end += 24;
|
||||
h += 24;
|
||||
}
|
||||
|
||||
if ((day_period.begin <= h) && (h < day_period.end)) {
|
||||
auto period = static_cast<DayPeriod>(day_period.day_period);
|
||||
return get_calendar_day_period_symbol(locale, calendar, style, period);
|
||||
}
|
||||
|
|
|
@ -261,6 +261,14 @@ describe("dayPeriod", () => {
|
|||
expect(as.format(d1)).toBe(d.as1);
|
||||
});
|
||||
});
|
||||
|
||||
test("flexible day period rolls over midnight", () => {
|
||||
// For the en locale, this time (05:00) falls in the flexible day period range of [21:00, 06:00).
|
||||
const date = Date.UTC(2017, 11, 12, 5, 0, 0, 0);
|
||||
|
||||
const en = new Intl.DateTimeFormat("en", { dayPeriod: "short", timeZone: "UTC" });
|
||||
expect(en.format(date)).toBe("5 at night");
|
||||
});
|
||||
});
|
||||
|
||||
describe("hour", () => {
|
||||
|
|
Loading…
Reference in a new issue