Javascript 根据给定的日期确定一周中的第一天

Javascript 根据给定的日期确定一周中的第一天,javascript,momentjs,Javascript,Momentjs,我想通过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

我想通过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

发生的情况是,您将获得2015-08-15本地周的
startOf()
,即2015-08-09周日,然后您将重置此ISO周的,即周一至周日,至第一天,当然是2015-08-02周一


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

发生的事情是,您将获得
startOf()
您当地的2015-08-15周,即2015-08-09周日,然后您将此ISO周,即周一到周日,重置为第一天,当然是2015年8月2日星期一


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

正确答案是:

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的帮助,正确答案将是:

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的帮助,我不认为这是当地的事情,而更应该是周日开始的一周的观点或宗教问题。你是说momentjs错了吗?如果是这样,我们想回答什么?我想你需要做的是
startOf('isoweek')
而不是
startOf('week')
@putvande-具体从周一开始,这一时刻正确地建模为
'isoweek'
。对美国来说,这就是在
en
地区的
'week'
时刻模型。我不认为这是当地的事情,但更像是周日开始的一周的观点或宗教事情。你是说momentjs有错吗?如果是这样,我们想回答什么?我想你需要做的是
startOf('isoweek')
而不是
startOf('week')
@putvande-具体从周一开始,这一时刻正确地建模为
'isoweek'
。对于美国来说,这就是
en
地区的
'week'
时刻模型。日期2015-08-02是周日,而不是周一。嘿@punud,当我使用此代码时:
var begin=moment(“2015-08-15”)。startOf('isoWeekday');console.log(开始);var end=力矩(“2015-08-15”).endOf(“等周日”);控制台日志(结束)结果为:
var begin=2015-08-14;var end=2015-08-14我做错什么了吗?
'isoWeek'
,而不是
'isoWeekday'
。另外,您应该使用
格式
或其他输出函数,而不是查看内部(下划线)属性。嘿@Matt Johnson,当我使用
isoWeek
时,结果是得到begin的以下答案:
对象{isamentobject:true,'i:'2015-08-15','f:'YYYY-MM-DD',isUTC:false,[u-pf:Object,[u-locale:Object,[u-isUTC:Date 2015-08-09T22:00:00.000Z}
这是结尾:
Object{[u-isamentiobject:true,[u-pf:[2015-08-15],[u-f:[yyyyy-MM-DD],[u-isUTC:false,[u-pf:Object,[u-locale:Object:Object,[u-locale:Object,[u-Date:Date 2015-08-16T21:59:59.999Z}
。我还是做错了什么吗?使用
格式
。不要看
\u i
\u d
等。工作示例:日期2015-08-02是星期日,而不是星期一。嘿@punud,当我使用此代码时:
var begin=moment(“2015-08-15”)。startOf('isoWeekday');console.log(开始);var end=力矩(“2015-08-15”).endOf(“等周日”);控制台日志(结束)结果为:
var begin=2015-08-14;var end=2015-08-14我做错什么了吗?
'isoWeek'
,而不是
'isoWeekday'
。另外,您应该使用
格式
或其他输出函数,而不是查看内部(下划线)属性。嘿@Matt Johnson,当我使用
isoWeek
时,结果是得到begin的以下答案:
对象{isamentobject:true,'i:'2015-08-15','f:'YYYY-MM-DD',isUTC:false,[u-pf:Object,[u-locale:Object,[u-isUTC:Date 2015-08-09T22:00:00.000Z}
这是结尾:
Object{[u-isamentiobject:true,[u-pf:[2015-08-15],[u-f:[yyyyy-MM-DD],[u-isUTC:false,[u-pf:Object,[u-locale:Object:Object,[u-locale:Object,[u-Date:Date 2015-08-16T21:59:59.999Z}
。我还是做错了什么吗?使用
格式
。不要看
\u i
\u d
等。工作示例: