1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 15:27:35 +00:00

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().
This commit is contained in:
Linus Groh 2021-11-16 19:40:03 +00:00
parent d82e41440c
commit 6b2e004c28

View file

@ -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