所以很简单:
import startOfMonth from 'date-fns/start_of_month';
export const getFirstDayThisMonth = date => {
const firstDay = startOfMonth(date);
return firstDay;
};
输入(例如):
1987-02-02T00:00:00.000Z
返回:
1987-01-31T23:00:00.000Z
按照this answer中提到的方法尝试生成第一个日期时,错误被完全重现:
var date = new Date();
var firstDay = new Date(date.getFullYear(), date.getMonth(), 1);
运行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)
如果在第二个解决方案中我还将第四个参数(小时)设置为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时,感觉好像有一些过渡到上一个日期吗?
每个请求,这是startOfMonth的date-fns
代码:
function startOfMonth (dirtyDate) {
var date = parse(dirtyDate)
date.setDate(1)
date.setHours(0, 0, 0, 0)
return date
}
我真的不明白为什么
var date = new Date();
var firstDay = new Date(date.getFullYear(), date.getMonth(), 1, 1);
似乎可以在二月至三月工作,但不能在四月工作?