Przeglądaj źródła

LibJS: Implement Date.prototype.to{Date,Time}String()

Linus Groh 5 lat temu
rodzic
commit
3fcea71538

+ 5 - 0
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<double>(m_datetime.timestamp() * 1000 + m_milliseconds));

+ 24 - 2
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<double>(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));
 }
 

+ 2 - 0
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&);
 };