moment / moment-timezone

Timezone support for moment.js

Home Page:momentjs.com/timezone

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

moment().valueOf returns a value even though it's invalid

tmkx opened this issue · comments

commented

Environment

moment.tz.setDefault();
t.ok(
  Number.isNaN(moment("2023/10/06", ["H", "HH", "HH:mm"], true).valueOf()),
);

moment.tz.setDefault('America/New_York');
// not expected
t.ok(
  Number.isNaN(moment("2023/10/06", ["H", "HH", "HH:mm"], true).valueOf()),
);

Issue description

when defaultZone is specified, valueOf will return a value even though it's invalid.

it seems to be caused by:

if (zone && needsOffset(mom) && !mom._isUTC) {
mom._d = moment.utc(mom._a)._d;
mom.utc().add(zone.parse(mom), 'minutes');
}

a fix that works:

- if (zone && needsOffset(mom) && !mom._isUTC) { 
+ if (zone && needsOffset(mom) && !mom._isUTC && mom.isValid()) { 
    mom._d = moment.utc(mom._a)._d;
    mom.utc().add(zone.parse(mom), 'minutes');
  }

Thanks for the detailed report. I've merged #1082 which contains the fix, and added your example as a test case in ece926a.