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(太平洋标准时间),这是需要的,但对于每个星期天,它返回即将到来的星期一,我想不出什么好东西
简而言之,我想从星期一而不是星期天开始我的一周
使用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)