ソースを参照

LibJS: Do not override hour, minute, and second format field lengths

This was an oversight in e42d954743056e476bbb1623cfc60e7797a8a6ca.

These fields should always follow the locale preference in the CLDR.
Overriding these fields would permit formats like "h:mm:ss" to result in
strings like "1:2:3" instead of "1:02:03".
Timothy Flynn 3 年 前
コミット
26f9666191

+ 5 - 0
Userland/Libraries/LibJS/Runtime/Intl/DateTimeFormat.cpp

@@ -666,6 +666,11 @@ Optional<Unicode::CalendarPattern> basic_format_matcher(Unicode::CalendarPattern
                 best_format_field = option_field;
             break;
 
+        case Unicode::CalendarPattern::Field::Hour:
+        case Unicode::CalendarPattern::Field::Minute:
+        case Unicode::CalendarPattern::Field::Second:
+            break;
+
         default:
             if (best_format_field.has_value() && option_field.has_value())
                 best_format_field = option_field;

+ 2 - 2
Userland/Libraries/LibJS/Tests/builtins/Intl/DateTimeFormat/DateTimeFormat.prototype.resolvedOptions.js

@@ -165,14 +165,14 @@ describe("correct behavior", () => {
     test("minute", () => {
         ["2-digit", "numeric"].forEach(minute => {
             const en = new Intl.DateTimeFormat("en", { minute: minute });
-            expect(en.resolvedOptions().minute).toBe(minute);
+            expect(en.resolvedOptions().minute).toBe("2-digit");
         });
     });
 
     test("second", () => {
         ["2-digit", "numeric"].forEach(second => {
             const en = new Intl.DateTimeFormat("en", { second: second });
-            expect(en.resolvedOptions().second).toBe(second);
+            expect(en.resolvedOptions().second).toBe("2-digit");
         });
     });