2

私は、単一の日付に基づいて1週間を形成するすべての日付を見つけようとしています。

したがって、日付が水曜日のように週の真ん中にある場合、日曜日、月曜日、土曜日まで戻ります。

次に例を示します。

それで、私が2012年10月10日水曜日を過ごしたとしましょう。

この日付オブジェクトを関数に渡すと、関数が返され['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

これは、指定された日付の前の最初の日曜日から次の日曜日までの日付インスタンスの配列を返す関数です。

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、の拡張として、を使用した短いバージョン(ワンライナー)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 に答える