startOfMonth 返回前一个月的最后一天

MrJ*_*eno 8 javascript date jestjs date-fns

所以这非常简单:

import startOfMonth from 'date-fns/start_of_month';

export const getFirstDayThisMonth = date => {
  const firstDay = startOfMonth(date);
  return firstDay;
};
Run Code Online (Sandbox Code Playgroud)

给定输入(例如):
1987-02-02T00:00:00.000Z

它返回:
1987-01-31T23:00:00.000Z

当尝试根据此答案中提到的方法生成第一个日期时,会准确地重现该错误:

var date = new Date();
var firstDay = new Date(date.getFullYear(), date.getMonth(), 1);
Run Code Online (Sandbox Code Playgroud)

运行 jest-tests 时出现错误,并且无法在按预期工作的控制台中重现:

const day1 = new Date('1987-02-02');
undefined
const day2 = new Date(day1.getFullYear(),day1.getMonth(),1)
undefined
day2
Sun Feb 01 1987 00:00:00 GMT+0100 (Central European Standard Time)
Run Code Online (Sandbox Code Playgroud)

如果在第二个解决方案中我还将第四个参数(小时)设置为 1,它会正确处理:

1987-02-02T00:00:00.000Z
返回1987-02-01T00:00:00.000Z

2001-03-03T00:00:00.000Z
返回2001-03-01T00:00:00.000Z

2002-04-04T00:00:00.000Z
回报2002-03-31T23:00:00.000Z

我真的不知道是什么原因导致了这个问题,当时间设置为 00:00:00 时,感觉好像有一些滚动到前一个日期?


根据请求,这是date-fnsstartOfMonth 的代码:

function startOfMonth (dirtyDate) {
  var date = parse(dirtyDate)
  date.setDate(1)
  date.setHours(0, 0, 0, 0)
  return date
}
Run Code Online (Sandbox Code Playgroud)

我真的不明白为什么

var date = new Date();
var firstDay = new Date(date.getFullYear(), date.getMonth(), 1, 1);
Run Code Online (Sandbox Code Playgroud)

好像2-3月可以用,4月就不行了?