From: Dmitry Volyntsev Date: Sat, 12 Sep 2026 03:33:48 +0000 (-0700) Subject: Date: fix UTC setters X-Git-Tag: 1.0.2~51 X-Git-Url: https://git.kaiwu.me/?a=commitdiff_plain;h=619c8203e892914940332e4b528bf65e310e20b3;p=njs.git Date: fix UTC setters The Date setters always converted their result as local time. Use the setter's UTC flag instead. Remove the intermediate range check in njs_make_date(). TimeClip already checks the result after local-to-UTC conversion, which can move a value across the valid time range boundary. --- diff --git a/src/njs_date.c b/src/njs_date.c index 57d92ee3..be8f6233 100644 --- a/src/njs_date.c +++ b/src/njs_date.c @@ -262,10 +262,6 @@ njs_make_date(int64_t tm[], njs_bool_t local) time += days * 86400000.0; - if (time < -8.64e15 || time > 8.64e15) { - return NAN; - } - if (local) { time += njs_tz_offset(time) * 60000; } @@ -1488,7 +1484,7 @@ njs_date_prototype_set_fields(njs_vm_t *vm, njs_value_t *args, } while (--left); - time = njs_make_date(tm, 1); + time = njs_make_date(tm, magic & 0x40); done: @@ -1726,4 +1722,3 @@ const njs_object_type_init_t njs_date_type_init = { .prototype_props = &njs_date_prototype_init, .prototype_value = { .object = { .type = NJS_OBJECT } }, }; - diff --git a/src/test/njs_unit_test.c b/src/test/njs_unit_test.c index e6368d8c..3528be7d 100644 --- a/src/test/njs_unit_test.c +++ b/src/test/njs_unit_test.c @@ -22469,6 +22469,10 @@ static njs_unit_test_t njs_tz_test[] = "d.getTime()"), njs_str("1299733323625") }, + { njs_str("var d = new Date(Date.UTC(2016, 6)); d.setUTCMonth(6, 6);" + "d.getTime()"), + njs_str("1467763200000") }, + { njs_str("var d = new Date(1308895323625); d.setMonth(2);" "d.getTime()"), njs_str("1300942923625") },