日時の計算でどうしてそうなるか理解できない

2020年6月7日
ユーザー

const d = new Date(2019, 10); の後、
d.setHours(10, 20, 30); で 2019/11/01 10:20:30になるところまでは理解できましたが、
その後さらに、
d.setDate(31); が 2019/12/01 10:20:30 となったり、
d.setDate(d.getDate() + 3); が 2019/12/04 10:20:30になるところが理解できません。

私の解釈では、
'use strict';

{
const d = new Date(2019, 10); // 2019/11/01 00:00:00
d.setHours(10, 20, 30); // 2019/11/01 10:20:30
d.setDate(31); // 2019/12/01 00:00:00
d.setDate(d.getDate() + 3); // 2019/11/04 00:00:00
console.log(d); // 2019/11/01 00:00:00
}

このように考えてしまいます。

この回答を見るにはプレミアムサービスへの登録が必要です

プレミアムサービスとは?