2

我正在尝试查找基于单个日期形成一整周的所有日期。

因此,如果日期位于一周的中间(如星期三),它将返回星期日、星期一,直到星期六。

这是一个例子:

所以假设我有Wed 10 Oct 2012

我会将此日期对象传递给函数并且函数将返回['2012-10-07', '2012-10-08', '2012-10-09', '2012-10-10', '2012-10-11', '2012-10-12', '2012-10-13'](我不想要字符串,但日期对象,字符串只是为了示例^^

我已经尝试过自己,但是我创建的方法很长而且很笨,无论如何:https ://gist.github.com/3889121

但我在这里主要寻找的是说明。用什么,有没有更简单的方法?

谢谢!

4

4 回答 4

4

这是一个函数,它返回从给定日期之前的第一个星期日到下一个星期日的 Date 实例数组:

function getWeek(fromDate){
 var sunday = new Date(fromDate.setDate(fromDate.getDate()-fromDate.getDay()))
    ,result = [new Date(sunday)];
 while (sunday.setDate(sunday.getDate()+1) && sunday.getDay()!==0) {
  result.push(new Date(sunday));
 }
 return result;
}
// usage
var week = getWeek(new Date('2012/10/10'));
console.log(week[0]); //=> Sun Oct 07 2012 00:00:00
console.log(week[6]); //=> Sat Oct 13 2012 00:00:00 

只是为了好玩,一个较短的版本(oneliner)使用Array.map, 作为Date.prototype

Date.prototype.getWeek = function(){
 return [new Date(this.setDate(this.getDate()-this.getDay()))]
          .concat(
            String(Array(6)).split(',')
               .map ( function(){
                       return new Date(this.setDate(this.getDate()+1));
                     }, this )
          );
}
// usage 
new Date('2012/10/10').getWeek(); //=> [07/10/2012, ... ,13/10/2012]
于 2012-10-14T17:07:46.250 回答
2

尝试这个:

 var date = new Date('2012/06/25');
 var day = date.getDay();
 var array = []
 for(var i=0;i<7;i++){
    if(i-day!=0){
      var days = i-day;
      var newDate =   new Date(date.getTime()+(days * 24 * 60 * 60 * 1000));
      array.push(newDate);
 }
    else 
    array.push(date);
 }
 alert(array);​

工作小提琴

于 2012-10-14T16:51:46.357 回答
0

使用 Date.js 库http://www.datejs.com 你可以这样做

someDate.next().sunday()
于 2012-10-14T16:56:19.360 回答
0

这可能对你有帮助,你可以输入 yeat:int、month:int 和 day:int,它会找到最近的最后一个星期天然后加上 7 天。最后它将返回一个日期范围。您可能需要修改输出以满足您的需要。如果您的月份 int 数组从 1 变为 12,请保留 _monthint - 1 否则您可以将其删除。

var moment = require('moment');

let getDatesSundayTo7DaysAheadFromADay = function( _yearint, _monthint, _dayint ){
    var input = new Date(_yearint, _monthint - 1, _dayint)
    let getLastSunday = function (d) {
        var t = new Date(d);
        t.setDate(t.getDate() - t.getDay());
        return t;
      }
    let lastsunday = getLastSunday(input)
    let addDays = function(dateObj, numDays) {
        var newdate = JSON.parse(JSON.stringify(dateObj));
        for(var i = 1; i < numDays ; i++){
            newdate =  moment(newdate).add(1, 'days')
        }
        return newdate
      }
    let sevendaysahead = addDays(lastsunday, 7)
    function getDates(startDate, stopDate) {
        var dateArray = [];
        var currentDate = moment(startDate);
        var stopDate = moment(stopDate);
        while (currentDate <= stopDate) {
            dateArray.push( moment(currentDate).format('YYYY-MM-DD') )
            currentDate = moment(currentDate).add(1, 'days');
        }
        return dateArray;
    }
    return getDates(lastsunday, sevendaysahead);
}
于 2018-09-18T18:13:21.057 回答