2016-09-12 1 views
3

と月の最初の曜日を取得します。私はmoment.jsを使用して、月の最初の曜日を取得するいくつかのコード(つまり、要件である)このようになります持ってmoment.js

dateStart: function() { 
    var first = moment().startOf('month'); 
    switch(first.day()) { 
     case 6: 
      return first.add(2, 'days'); 
     case 0: 
      return first.add(1, 'days'); 
     default: 
      return first; 
    }; 
} 

することはありますこれを行う良い方法は?

+0

チェックアウトこのスレッド:http://stackoverflow.com/questions/18875649/moment-js-starting-the-week-on-monday-with-isoweekday –

+0

を私はあなたの方法があると思いますかなり賢い。 –

答えて

2

初日が日曜日または土曜日(first.day() % 6 === 0)がある場合は、次の月曜日(first.day(1))を返す:前月に月曜日を返すことができ、コメントfirst.day(1)で述べたように

function dateStart() { 
    var first = moment().startOf('month'); 
    return first.day() % 6 === 0 ? first.add(1, 'day').day(1) : first; 
} 

。これは、月の初日が土曜日である場合に発生します。あなたが今月の週から月曜日を受け取れるようにするには、週末の日付に1を加えてください。

+1

エーム、これは動作しません。 'first.day(1)'は、その月の最初の日と同じ週の月曜日を取得します。これは前月にある可能性があります。こちらをご覧ください:https://jsfiddle.net/yd5qaLa1/ –

+0

はうまくいきました –

+0

私に助けてくれてありがとう、ありがとう:)しかし、先月の平日の最後の日はどうですか?(これは12月になる予定です) – wiwit

0

興味深い質問です。私はあなたが月の最初の日を取得してから、その日が作業日になるまで日数を加えなければならないと思います。それをチェックアウト:https://jsfiddle.net/4rfrg4c0/2/

function get_first_working_day (year, month) { 

    // get the first day of the specified month and year 
    var first_working_day = new moment([year, month]) 

    // add days until the day is a working day 
    while (first_working_day.day() % 6 == 0) { 
     first_working_day = first_working_day.add(1, 'day') 
    } 

    // return the day 
    return first_working_day 
} 

// tests 
$('.september').append(get_first_working_day(2016, 8).format('dddd, MMMM Do YYYY')) 
$('.october').append(get_first_working_day(2016, 9).format('dddd, MMMM Do YYYY')) 
関連する問題