从整个一周开始

时间:2012-10-14 16:40:26

标签: javascript date

我正在尝试根据单个日期查找将形成整周的所有日期。

因此,如果日期位于星期三的中间,那么它将在星期日,星期一,直到星期六。

以下是一个例子:

所以,假设我 2012年10月10日星期三

我会将这个日期对象传递给函数,函数将返回['2012-10-07', '2012-10-08', '2012-10-09', '2012-10-10', '2012-10-11', '2012-10-12', '2012-10-13'](我不想要字符串,但Date对象,字符串仅用于示例^^

我已经尝试过自己了,但是我创建的方法很长很愚蠢,无论如何都是这样:https://gist.github.com/3889121

但我在这里主要寻找的是指示。使用什么,有更简单的方法吗?

谢谢!

4 个答案:

答案 0 :(得分: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);​

<强> Working Fiddle

答案 1 :(得分:2)

这是一个函数,它返回从给定日期之前的第一个星期日到下一个星期日的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 

只是为了好玩,使用Array.map的较短版本(oneliner)作为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]

答案 2 :(得分:0)

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

someDate.next().sunday()

答案 3 :(得分:0)

这可能会对您有所帮助,您可以输入yeat:int,month:int和day:int,它将找到最近的最后一个星期日,然后增加7天。最后,它将返回一个日期范围。您可能需要修改输出以适合您的需求。如果您的month 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);
}