获取当前周今天 javascript

Kum*_*ain 0 javascript datetime momentjs

我想根据今天的时间获得本周的“星期一”,样本是:

21-11-2017 输出应该是 20-11-2017

23-11-2017 输出应该是 20-11-2017

26-11-2017 输出应该是 20-11-2017

var d = new Date();
 console.log(d.getDate())
 console.log(d.getDay()+1)
d.setDate(d.getDate() - d.getDay()+1);
Run Code Online (Sandbox Code Playgroud)

除了星期日(26-11-2017)手动更改时间以测试它返回的不同情况外,代码工作正常

Mon Nov 27 2017 23:50:39 GMT-0800 (Pacific Standard Time) 
Run Code Online (Sandbox Code Playgroud)

对于其他日期,如

25-11-2017 返回 2017 年 11 月 20 日星期一 23:50:39 GMT-0800(太平洋标准时间)

24-11-2017 返回 2017 年 11 月 20 日星期一 23:50:39 GMT-0800(太平洋标准时间)

22-11-2017 它返回 Mon Nov 20 2017 23:50:39 GMT-0800(太平洋标准时间),这是需要的,但对于每个星期天,它返回即将到来的星期一,我想不出什么好东西

简而言之,我想从星期一而不是星期天开始我的一周

T.J*_*der 5

使用setDate而不是setDay更改实例中的日期。循环直到你到达星期一:

var dt = new Date();
while (dt.getDay() != 1) {
  dt.setDate(dt.getDate() - 1);
}
console.log(dt.toString());
Run Code Online (Sandbox Code Playgroud)

您的开始日期示例:

test("19-11-2017");
test("20-11-2017");
test("21-11-2017");
test("22-11-2017");
test("23-11-2017");
test("24-11-2017");
test("25-11-2017");
test("26-11-2017");
function findMonday(dt) {
  while (dt.getDay() != 1) {
    dt.setDate(dt.getDate() - 1);
  }
  return dt;
}
function test(str) {
  var parts = str.split("-");
  var dt = findMonday(new Date(+parts[2], +parts[1] - 1, +parts[0]));
  console.log("Start: " + str + ", found: " + dt.toString());
}
Run Code Online (Sandbox Code Playgroud)
.as-console-wrapper {
  max-height: 100% !important;
}
Run Code Online (Sandbox Code Playgroud)

或者它稍微更有效(除非你在一个紧密的循环中这样做数十万次,否则这无关紧要)来计算出需要多少天去和去一次:

var dt = new Date();
var days = ((dt.getDay() + 7) - 1) % 7;
dt.setDate(dt.getDate() - days);
console.log(dt.toString());
Run Code Online (Sandbox Code Playgroud)

您的开始日期示例:

test("19-11-2017");
test("20-11-2017");
test("21-11-2017");
test("22-11-2017");
test("23-11-2017");
test("24-11-2017");
test("25-11-2017");
test("26-11-2017");
function findMonday(dt) {
    var days = ((dt.getDay() + 7) - 1) % 7;
    dt.setDate(dt.getDate() - days);
  return dt;
}
function test(str) {
  var parts = str.split("-");
  var dt = findMonday(new Date(+parts[2], +parts[1] - 1, +parts[0]));
  console.log("Start: " + str + ", found: " + dt.toString());
}
Run Code Online (Sandbox Code Playgroud)
.as-console-wrapper {
  max-height: 100% !important;
}
Run Code Online (Sandbox Code Playgroud)