2017-07-12 15 views
3

モーニングjsを使用して、与えられた月の第2火曜日を取得するか、または与えられた月の第3木曜日に取得する方法。モーメントjsは、週と曜日で月の特定の日を取得します。

解決策を見つけようとしましたが、失敗しました。私はそれを自分で書いて、以下の答えを掲示し、よりよい解決策があればあなたの実装に答えることができます。

+0

おそらく私はあなたが求めているかを正確に取得していないが、([こちら] https://stackoverflow.com/q/33335554を参照してください/ 4131048)(および[ここ](https://stackoverflow.com/q/43204474/4131048))を使用して、同様の質問に対する解決策を得ることができます。 – VincenzoC

+0

彼らは1つの特定の日にのみ動作します。私の要件は、任意の週の任意の日です。 –

+0

リンクされた答えの曜日は「ハードコードされています」ですが、その答えから始まるより一般的な解決策を得るのは簡単だと思います。とにかく私は何週目もの日を取ろうと試みて更新された回答を投稿しました。 – VincenzoC

答えて

2
//get a preferred day of a month 
var getGivenDateOfMonth = function (startDate, dayOfWeek, weekNumber) { 
      var startOfMonth = moment(startDate).utc().startOf('month').startOf('isoweek'); 
      var dayOne = moment((moment(startDate, "YYYY-MM-DD").format("YYYY-MM") + "-01"),"YYYY-MM-DD"); 
      var studyDate; 
      if (dayOne.isoWeekday() === 1) { 
       studyDate = moment(startDate).utc().startOf('month').startOf('isoweek').add(dayOfWeek - 1, 'days') 
        .add(weekNumber, 'w'); 
      } 
      else if (dayOne.isoWeekday() <= dayOfWeek) { 
       studyDate = moment(startDate).utc().startOf('month').startOf('isoweek').add(dayOfWeek - 1, 'days') 
        .add(weekNumber - 1, 'w'); 
      } else { 
       studyDate = moment(startDate).utc().startOf('month').startOf('isoweek').add(dayOfWeek - 1, 'days') 
        .add(weekNumber, 'w'); 
      } 
      if (studyDate.month() == startOfMonth.month()) { 
       studyDate = studyDate.subtract(1, 'w'); 
      } 
      return studyDate; 
     }; 

たstartDateは、指定した月の日付です。
のdayOfWeekは、週番号(1,2,3,4)あなたはここで

2

私はコメントでリンクの答えの更新バージョンたい瞬間JS ISOの曜日と weeknumber
されています。私はweekdayを使用してロケール対応の曜日を使用しましたが、日曜日は0、土曜日は6としたい場合は、dayを使用できます。

var getGivenDateOfMonth = function (startDate, dayOfWeek, weekNumber) { 
 
    // Start of the month of the given startDate 
 
    var myMonth = moment(startDate).startOf('month'); 
 
    // dayOfWeek of the first week of the month 
 
    var firstDayOfWeek = myMonth.clone().weekday(dayOfWeek); 
 
    // Check if first firstDayOfWeek is in the given month 
 
    if(firstDayOfWeek.month() != myMonth.month()){ 
 
     weekNumber++; 
 
    } 
 
    // Return result 
 
    return firstDayOfWeek.add(weekNumber-1, 'weeks'); 
 
} 
 

 
// Examples 
 
var secondMondayOfJuly = getGivenDateOfMonth('2017-07-10', 1, 2); 
 
console.log(secondMondayOfJuly.format()); 
 
var thirdFridayOfJuly = getGivenDateOfMonth('2017-07-10', 5, 3); 
 
console.log(thirdFridayOfJuly.format());
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>

0

function nthDayOfMonth(month, year, day, weekNum){ 
 
    var nearestDay = moment(month + " " + year,"M YYYY").day(day); 
 
    var nthDay = nearestDay.add(nearestDay.isSame(moment({month: month}),"month") ? weekNum - 1 : weekNum ,"weeks"); 
 
    return nthDay; 
 
} 
 

 
document.write(nthDayOfMonth(7,2017,3,3).format("L"));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>

関連する問題