Sfoglia il codice sorgente

LibJS: Fix incorrect use of "modulo" in {hour,min,sec,ms}_from_time()

These all would return incorrect results for negative time values.
Also adds a missing floor() in sec_from_time().
Linus Groh 3 anni fa
parent
commit
6b2e004c28
1 ha cambiato i file con 5 aggiunte e 4 eliminazioni
  1. 5 4
      Userland/Libraries/LibJS/Runtime/Date.cpp

+ 5 - 4
Userland/Libraries/LibJS/Runtime/Date.cpp

@@ -6,6 +6,7 @@
 
 #include <AK/StringBuilder.h>
 #include <LibCore/DateTime.h>
+#include <LibJS/Runtime/AbstractOperations.h>
 #include <LibJS/Runtime/Date.h>
 #include <LibJS/Runtime/GlobalObject.h>
 #include <time.h>
@@ -282,28 +283,28 @@ u8 month_from_time(double t)
 u8 hour_from_time(double t)
 {
     // 𝔽(floor(ℝ(t / msPerHour)) modulo HoursPerDay)
-    return static_cast<u8>(fmod(floor(t / MS_PER_HOUR), HOURS_PER_DAY));
+    return static_cast<u8>(modulo(floor(t / MS_PER_HOUR), HOURS_PER_DAY));
 }
 
 // MinFromTime(t), https://tc39.es/ecma262/#eqn-MinFromTime
 u8 min_from_time(double t)
 {
     // 𝔽(floor(ℝ(t / msPerMinute)) modulo MinutesPerHour)
-    return static_cast<u8>(fmod(floor(t / MS_PER_MINUTE), MINUTES_PER_HOUR));
+    return static_cast<u8>(modulo(floor(t / MS_PER_MINUTE), MINUTES_PER_HOUR));
 }
 
 // SecFromTime(t), https://tc39.es/ecma262/#eqn-SecFromTime
 u8 sec_from_time(double t)
 {
     // 𝔽(floor(ℝ(t / msPerSecond)) modulo SecondsPerMinute)
-    return static_cast<u8>(fmod(t / MS_PER_SECOND, SECONDS_PER_MINUTE));
+    return static_cast<u8>(modulo(floor(t / MS_PER_SECOND), SECONDS_PER_MINUTE));
 }
 
 // msFromTime(t), https://tc39.es/ecma262/#eqn-msFromTime
 u16 ms_from_time(double t)
 {
     // 𝔽(ℝ(t) modulo msPerSecond)
-    return static_cast<u16>(fmod(t, MS_PER_SECOND));
+    return static_cast<u16>(modulo(t, MS_PER_SECOND));
 }
 
 // 21.4.1.11 MakeTime ( hour, min, sec, ms ), https://tc39.es/ecma262/#sec-maketime