summaryrefslogtreecommitdiff
path: root/Userland/Libraries
diff options
context:
space:
mode:
authorIdan Horowitz <idan.horowitz@gmail.com>2021-06-06 16:27:38 +0300
committerLinus Groh <mail@linusgroh.de>2021-06-06 19:14:11 +0100
commit46214f0657c35f9af266cd38985fe787e1f429d0 (patch)
tree744af35a7d9aff2bc5f7ba145f668d949eaa55d0 /Userland/Libraries
parent17afe015a5496643e441f1f0f9abc5cf6a4bcd25 (diff)
downloadserenity-46214f0657c35f9af266cd38985fe787e1f429d0.zip
LibJS: Store Date milliseconds as signed to support negative offsets
We need to support the range of -999 to 999.
Diffstat (limited to 'Userland/Libraries')
-rw-r--r--Userland/Libraries/LibJS/Runtime/Date.cpp6
-rw-r--r--Userland/Libraries/LibJS/Runtime/Date.h10
-rw-r--r--Userland/Libraries/LibJS/Runtime/DateConstructor.cpp4
3 files changed, 10 insertions, 10 deletions
diff --git a/Userland/Libraries/LibJS/Runtime/Date.cpp b/Userland/Libraries/LibJS/Runtime/Date.cpp
index 39a07cdcc6..b56b8b7c8d 100644
--- a/Userland/Libraries/LibJS/Runtime/Date.cpp
+++ b/Userland/Libraries/LibJS/Runtime/Date.cpp
@@ -14,7 +14,7 @@
namespace JS {
-Date* Date::create(GlobalObject& global_object, Core::DateTime datetime, u16 milliseconds, bool is_invalid)
+Date* Date::create(GlobalObject& global_object, Core::DateTime datetime, i16 milliseconds, bool is_invalid)
{
return global_object.heap().allocate<Date>(global_object, datetime, milliseconds, is_invalid, *global_object.date_prototype());
}
@@ -24,11 +24,11 @@ Date* Date::now(GlobalObject& global_object)
struct timeval tv;
gettimeofday(&tv, nullptr);
auto datetime = Core::DateTime::now();
- auto milliseconds = static_cast<u16>(tv.tv_usec / 1000);
+ auto milliseconds = static_cast<i16>(tv.tv_usec / 1000);
return create(global_object, datetime, milliseconds);
}
-Date::Date(Core::DateTime datetime, u16 milliseconds, bool is_invalid, Object& prototype)
+Date::Date(Core::DateTime datetime, i16 milliseconds, bool is_invalid, Object& prototype)
: Object(prototype)
, m_datetime(datetime)
, m_milliseconds(milliseconds)
diff --git a/Userland/Libraries/LibJS/Runtime/Date.h b/Userland/Libraries/LibJS/Runtime/Date.h
index fc75f2d280..00ca3be055 100644
--- a/Userland/Libraries/LibJS/Runtime/Date.h
+++ b/Userland/Libraries/LibJS/Runtime/Date.h
@@ -15,10 +15,10 @@ class Date final : public Object {
JS_OBJECT(Date, Object);
public:
- static Date* create(GlobalObject&, Core::DateTime, u16 milliseconds, bool is_invalid = false);
+ static Date* create(GlobalObject&, Core::DateTime, i16 milliseconds, bool is_invalid = false);
static Date* now(GlobalObject&);
- Date(Core::DateTime datetime, u16 milliseconds, bool is_invalid, Object& prototype);
+ Date(Core::DateTime datetime, i16 milliseconds, bool is_invalid, Object& prototype);
virtual ~Date() override;
Core::DateTime& datetime() { return m_datetime; }
@@ -27,7 +27,7 @@ public:
int date() const { return datetime().day(); }
int day() const { return datetime().weekday(); }
int hours() const { return datetime().hour(); }
- u16 milliseconds() const { return m_milliseconds; }
+ i16 milliseconds() const { return m_milliseconds; }
int minutes() const { return datetime().minute(); }
int month() const { return datetime().month() - 1; }
int seconds() const { return datetime().second(); }
@@ -46,7 +46,7 @@ public:
int utc_month() const;
int utc_seconds() const;
- void set_milliseconds(u16 milliseconds)
+ void set_milliseconds(i16 milliseconds)
{
m_milliseconds = milliseconds;
}
@@ -79,7 +79,7 @@ private:
tm to_utc_tm() const;
Core::DateTime m_datetime;
- u16 m_milliseconds;
+ i16 m_milliseconds;
bool m_is_invalid { false };
};
diff --git a/Userland/Libraries/LibJS/Runtime/DateConstructor.cpp b/Userland/Libraries/LibJS/Runtime/DateConstructor.cpp
index 33c2bf5259..20349a0fa0 100644
--- a/Userland/Libraries/LibJS/Runtime/DateConstructor.cpp
+++ b/Userland/Libraries/LibJS/Runtime/DateConstructor.cpp
@@ -152,7 +152,7 @@ Value DateConstructor::construct(Function&)
auto create_invalid_date = [this]() {
auto datetime = Core::DateTime::create(1970, 1, 1, 0, 0, 0);
- auto milliseconds = static_cast<u16>(0);
+ auto milliseconds = static_cast<i16>(0);
return Date::create(global_object(), datetime, milliseconds, true);
};
@@ -173,7 +173,7 @@ Value DateConstructor::construct(Function&)
// A timestamp since the epoch, in UTC.
double value_as_double = value.as_double();
auto datetime = Core::DateTime::from_timestamp(static_cast<time_t>(value_as_double / 1000));
- auto milliseconds = static_cast<u16>(fmod(value_as_double, 1000));
+ auto milliseconds = static_cast<i16>(fmod(value_as_double, 1000));
return Date::create(global_object(), datetime, milliseconds);
}