根据时刻js中的给定日期确定一周的第一天

Determine first day of a week by a given date in moment js

本文关键字:日期 一周 第一天 js 时刻      更新时间:2023-09-26

我想在Moment.js中确定给定日期的一周的第一天。这是我的代码:

var begin = moment("2015-08-15").startOf('week').isoWeekday(0);
console.log(begin);
var end = moment("2015-08-15").endOf('week').isoWeekday(0);
console.log(end);

得到以下输出:

Object { _isAMomentObject: true, _i: "2015-08-15", _f: "YYYY-MM-DD", _isUTC: false, _pf: Object, _locale: Object, _d: Date 2015-08-01T22:00:00.000Z }
Object { _isAMomentObject: true, _i: "2015-08-15", _f: "YYYY-MM-DD", _isUTC: false, _pf: Object, _locale: Object, _d: Date 2015-08-09T21:59:59.999Z }

根据文档,本地默认为"en",这意味着一周的第一天是周日。在我看来,正确的结果应该是:

begin = 2015-08-09
end = 2015-08-15

当我将isoWeekday从'0'更改为'1'时,结果如下:

Object { _isAMomentObject: true, _i: "2015-08-15", _f: "YYYY-MM-DD", _isUTC: false, _pf: Object, _locale: Object, _d: Date 2015-08-02T22:00:00.000Z }
Object { _isAMomentObject: true, _i: "2015-08-15", _f: "YYYY-MM-DD", _isUTC: false, _pf: Object, _locale: Object, _d: Date 2015-08-10T21:59:59.999Z }

这也是错误的。正确答案应该是:

begin = 2015-08-10
end = 2015-08-16

正确答案是:

var begin = moment().subtract(1, 'week').startOf('week').format("YYYY MM DD");
var end = moment().subtract(1, 'week').endOf('week').format("YYYY MM DD");

感谢@MattJohnson的帮助

发生的事情是,您将startOf()您的本地周2015-08-15,即星期日2015-08-09,然后您将这个ISO周,从星期一到星期日,重置到它的第一天,当然是星期一2015-08-02。

您需要使用startOf('isoWeek')来保持一致的行为