2016-01-24 57 views
9

次の月曜日または木曜日の日付を取得したい(月または木曜日の場合は今日)。この作品次の月曜日または木曜日にmoment.jsを取得する

if (moment().format("dddd")=="Sunday") { var nextDay = moment().day(1); } 
if (moment().format("dddd")=="Monday") { var nextDay = moment().day(1); } 
if (moment().format("dddd")=="Tuesday") { var nextDay = moment().day(4); } 
if (moment().format("dddd")=="Wednesday") { var nextDay = moment().day(4); } 
if (moment().format("dddd")=="Thursday") { var nextDay = moment().day(4); } 
if (moment().format("dddd")=="Friday") { var nextDay = moment(.day(8); } 
if (moment().format("dddd")=="Saturday") { var nextDay = moment().day(8); } 

、しかし確実に、より良いがあります: - Moment.jsは日曜日の範囲内で働くとして土曜日は、私は現在の一日の仕事とそれに基づいて次の月曜日または木曜日を計算するために抱えています方法!

+0

ます。http:// stackoverflowの.com/questions/22144940/get-next-week-start-and-end-jquery-and-moment-jsを使用する –

+0

これはどうやって使っていますか、それとも使いたいのですか?そしてなぜ月曜日+1が火曜日に+4ですか? – charlietfl

+0

ああ、今日が月か木かは、次の月か木を取らないと今日になる。私は質問を編集します –

答えて

24

ファーストあなたは今週のどこにいるかを知る必要があります:moment.day()、または少し予測可能です(ロケールにもかかわらず)moment().isoWeekday()

今日の日があなたが望む日よりも小さいか大きいかを知りたいですか?それが大きければ、来週に使いたいと思う。それが小さい場合は、今週の月曜日または木曜日を使用できます。

const dayINeed = 4; // for Thursday 
if (moment().isoWeekday() <== dayINeed) { 
    return moment().isoWeekday(dayINeed); 
} else... 

次に、あなたは関係なく、あなたは現在の週のどこにいるの、「来週の月曜日を」あなたを与えるソリューションを求めています。一言で言えば、まずmoment().add(1, 'weeks')を使って来週に行きたいと思っています。来週になると、moment().day(1)を使用して、希望する日を選択することができます。一緒

const dayINeed = 4; // for Thursday 

// if we haven't yet passed the day of the week that I need: 
if (moment().isoWeekday() <== dayINeed) { 
    // then just give me this week's instance of that day 
    return moment().isoWeekday(dayINeed); 
} else { 
    // otherwise, give me next week's instance of that day 
    return moment().add(1, 'weeks').isoWeekday(dayINeed); 
} 

https://stackoverflow.com/a/27305748/800457

5

moment().day()は、day_of_weekを参照する番号を示します。

さらに良いもの:moment().day(1 + 7)moment().day(4 + 7)は、次の月曜日、次の木曜日にそれぞれあなたに与えます。 http://momentjs.com/docs/#/get-set/day/

+1

残念ながら、これは当てはまりません。今日が火曜日26日の場合、moment()。day(1)は月曜日25日を返します。 - moment()。day(8)は、次の月曜日を返します。 –

2

IMHO、よりエレガントな方法:

もっと見る

var setDays = [ 1, 1, 4, 4, 4, 8, 8 ], 
    nextDay = moment().day(setDays[moment().day()]); 
4

今から任意の次の平日の日(または任意の日付)を取得するために使用することができ、次の

var weekDayToFind = moment().day('Monday').weekday(); //change to searched day name 

var searchDate = moment(); //now or change to any date 
while (searchDate.weekday() !== weekDayToFind){ 
    searchDate.add(1, 'day'); 
} 
0

を参照してくださいここで、例えばです次の月曜日:それは月曜日である場合

var chosenWeekday = 1 // Monday 

var nextChosenWeekday = chosenWeekday < moment().weekday() ? moment().weekday(chosenWeekday + 7) : moment().weekday(chosenWeekday) 
+0

申し訳ありませんが、これは真実ではありません。あなたの最初の例は、今週の月曜日を与えます。既に火曜日の場合は、前の月曜日が表示されます。 –

+0

あなたは正しいと思っています@ShannonPoole – softcode

+0

@ShannonPoole指摘のためにthxを修正しました – softcode

2

瞬間

moment().startOf('isoWeek').add(1, 'week'); 
+0

これは、使用されているロケールの開始日と思われる日に依存しませんか? – jorisw

+1

バージョン2現在、ロケールを認識している週の開始日を使用しています。 – AshUK

+1

と '.startOf( 'isoWeek')' ISO 8601は、月曜日から始まる1から7までの平日の数字を指定します。日曜日で終わる – AshUK

0

を使用して次月​​曜日を取得するには、ここでは次の月曜日を見つけるためのソリューション、または今日:

const dayOfWeek = moment().day('monday').hour(0).minute(0).second(0); 

const endOfToday = moment().hour(23).minute(59).second(59); 

if(dayOfWeek.isBefore(endOfToday)) { 
    dayOfWeek.add(1, 'weeks'); 
} 
関連する問題