Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在JavaScript中获取前8个星期天?_Javascript - Fatal编程技术网

如何在JavaScript中获取前8个星期天?

如何在JavaScript中获取前8个星期天?,javascript,Javascript,我正在尝试用JavaScript获取之前的8个星期天。这不仅不起作用,而且看起来很笨重。我觉得用阵列的东西会更干净。我做错了什么 var now = new Date(); var today = new Date(now.getFullYear(), now.getMonth(), now.getDate()); var lastSunday = new Date(today.setDate(today.getDate() - today.getDay())); lastSunday = la

我正在尝试用JavaScript获取之前的8个星期天。这不仅不起作用,而且看起来很笨重。我觉得用阵列的东西会更干净。我做错了什么

var now = new Date();
var today = new Date(now.getFullYear(), now.getMonth(), now.getDate());
var lastSunday = new Date(today.setDate(today.getDate() - today.getDay()));
lastSunday = lastSunday.format("mm/dd/yyyy");

var lastSunday2 = new Date(today.setDate(today.getDate() - today.getDay() - 7));
lastSunday2 = lastSunday2.format("mm/dd/yyyy");
var lastSunday3 = new Date(today.setDate(today.getDate() - today.getDay() - 14));
lastSunday3 = lastSunday3.format("mm/dd/yyyy");
var lastSunday4 = new Date(today.setDate(today.getDate() - today.getDay() - 21));
lastSunday4 = lastSunday4.format("mm/dd/yyyy");
var lastSunday5 = new Date(today.setDate(today.getDate() - today.getDay() - 28));
lastSunday5 = lastSunday5.format("mm/dd/yyyy");
var lastSunday6 = new Date(today.setDate(today.getDate() - today.getDay() - 35));
lastSunday6 = lastSunday6.format("mm/dd/yyyy");
var lastSunday7 = new Date(today.setDate(today.getDate() - today.getDay() - 42));
lastSunday7 = lastSunday7.format("mm/dd/yyyy");
var lastSunday8 = new Date(today.setDate(today.getDate() - today.getDay() - 49));
lastSunday8 = lastSunday8.format("mm/dd/yyyy");

console.log(lastSunday8); //this gives 06/25/2017 Obviously not what I wanted.

不需要为每个日期创建单独的变量,您可以使用for循环和数组来存储它们

var date = new Date();
date.setDate(date.getDate() - date.getDay()); //start at last sunday

var dates = [];
for (var i = 0; i < 8; i++) {
    dates.push(new Date(date));
    date.setDate(date.getDate() - 7); //subtract a week
}

例如-以毫秒为单位计算时间增量

var today = new Date();
var lastSunday = new Date(today - today.getDay()*3600*24*1000);
console.log('Last Sunday: ' + lastSunday)
for(var i=2; i <= 8; i++) {
  lastSunday = new Date(lastSunday - 7 * 3600*24*1000);
  console.log('Sunday ' + i + ': ' + lastSunday);
}

您每次都将日期设置为与代码行中引用的星期日相等;所以你增加了每一行,减去的天数都应该是7,试着把所有的-number改为-7,因为每一行你都在设置日期,减去7*n;其中n=周数;
您还应该习惯使用console.log语句或cli debug逐行检查代码以检查当前持有的值变量。

为什么不简单地使用momentjs?@Andy请不要只是建议他使用库,这有点不必要。您考虑过使用for循环吗?您使用的是库吗?lastSunday.format通常会引发错误。每次执行today.setDatetoday.getDate-today.getDay-7操作时,您今天都要修改,因此只需不断减去7,并在每个操作中使用循环。并非所有白天都是24小时的夏令时,使用set和get Date方法比24小时调整时间值要好得多。这很好,但它给了我周一而不是周日。var now=新日期;var date=new Datenow.getFullYear,now.getMonth,now.getDate;加上这个,它给我星期天,谢谢@Dong将其更改为date.setUTCDatedate.getUTCDate-date.getUTCDay;我也解决了这个问题,似乎是UTC/区域设置混合的问题,导致它在UTC日结束后无法正常工作。