モーニングjsを使用して、与えられた月の第2火曜日を取得するか、または与えられた月の第3木曜日に取得する方法。モーメントjsは、週と曜日で月の特定の日を取得します。
解決策を見つけようとしましたが、失敗しました。私はそれを自分で書いて、以下の答えを掲示し、よりよい解決策があればあなたの実装に答えることができます。
モーニングjsを使用して、与えられた月の第2火曜日を取得するか、または与えられた月の第3木曜日に取得する方法。モーメントjsは、週と曜日で月の特定の日を取得します。
解決策を見つけようとしましたが、失敗しました。私はそれを自分で書いて、以下の答えを掲示し、よりよい解決策があればあなたの実装に答えることができます。
//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)あなたはここで
私はコメントでリンクの答えの更新バージョンたい瞬間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>
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>
おそらく私はあなたが求めているかを正確に取得していないが、([こちら] https://stackoverflow.com/q/33335554を参照してください/ 4131048)(および[ここ](https://stackoverflow.com/q/43204474/4131048))を使用して、同様の質問に対する解決策を得ることができます。 – VincenzoC
彼らは1つの特定の日にのみ動作します。私の要件は、任意の週の任意の日です。 –
リンクされた答えの曜日は「ハードコードされています」ですが、その答えから始まるより一般的な解決策を得るのは簡単だと思います。とにかく私は何週目もの日を取ろうと試みて更新された回答を投稿しました。 – VincenzoC