diff --git a/Libraries/LibJS/Runtime/Date.h b/Libraries/LibJS/Runtime/Date.h index c4d374e9e1d..875f8bf5d2b 100644 --- a/Libraries/LibJS/Runtime/Date.h +++ b/Libraries/LibJS/Runtime/Date.h @@ -36,6 +36,11 @@ public: Core::DateTime& datetime() { return m_datetime; } u16 milliseconds() { return m_milliseconds; } + + String date_string() { return m_datetime.to_string("%a %b %d %Y"); } + // FIXME: Deal with timezones once SerenityOS has a working tzset(3) + String time_string() { return m_datetime.to_string("%T GMT+0000 (UTC)"); } + virtual Value value_of() const override { return Value(static_cast(m_datetime.timestamp() * 1000 + m_milliseconds)); diff --git a/Libraries/LibJS/Runtime/DatePrototype.cpp b/Libraries/LibJS/Runtime/DatePrototype.cpp index 0bd6e260ed0..c4cf3a65992 100644 --- a/Libraries/LibJS/Runtime/DatePrototype.cpp +++ b/Libraries/LibJS/Runtime/DatePrototype.cpp @@ -58,6 +58,8 @@ DatePrototype::DatePrototype() put_native_function("getMonth", get_month); put_native_function("getSeconds", get_seconds); put_native_function("getTime", get_time); + put_native_function("toDateString", to_date_string); + put_native_function("toTimeString", to_time_string); put_native_function("toString", to_string); } @@ -147,13 +149,33 @@ Value DatePrototype::get_time(Interpreter& interpreter) return Value(static_cast(seconds * 1000 + milliseconds)); } +Value DatePrototype::to_date_string(Interpreter& interpreter) +{ + auto* this_object = this_date_from_interpreter(interpreter); + if (!this_object) + return {}; + auto string = this_object->date_string(); + return js_string(interpreter.heap(), move(string)); +} + +Value DatePrototype::to_time_string(Interpreter& interpreter) +{ + auto* this_object = this_date_from_interpreter(interpreter); + if (!this_object) + return {}; + auto string = this_object->time_string(); + return js_string(interpreter.heap(), move(string)); +} + Value DatePrototype::to_string(Interpreter& interpreter) { auto* this_object = this_date_from_interpreter(interpreter); if (!this_object) return {}; - // FIXME: Deal with timezones once SerenityOS has a working tzset(3) - auto string = this_object->datetime().to_string("%a %b %d %Y %T GMT+0000 (UTC)"); + auto string = String::format( + "%s %s", + this_object->date_string().characters(), + this_object->time_string().characters()); return js_string(interpreter.heap(), move(string)); } diff --git a/Libraries/LibJS/Runtime/DatePrototype.h b/Libraries/LibJS/Runtime/DatePrototype.h index 69205f2802b..b92abe2b033 100644 --- a/Libraries/LibJS/Runtime/DatePrototype.h +++ b/Libraries/LibJS/Runtime/DatePrototype.h @@ -47,6 +47,8 @@ private: static Value get_month(Interpreter&); static Value get_seconds(Interpreter&); static Value get_time(Interpreter&); + static Value to_date_string(Interpreter&); + static Value to_time_string(Interpreter&); static Value to_string(Interpreter&); };