2011-09-14 4 views
1

私は月と日の曜日を得ることができる日付を与えられたと言います。例えば(JavaScriptで):曜日とその日がある場合、一定の時間内にその序列を得ることはできますか?

var d = new Date(1316038581772); // Wed Sep 14 2011 12:16:21 GMT-1000 
var dayOfWeek = d.getDay(); // 3 - Wednesday 
var dayOfMonth = d.getDate(); // 14 - Day of month 

私は、この日が月の週のn日目であることをnな価値を探しています。この場合、2011年9月の第2水曜日のn=2を探しています。

単純なアルゴリズムは、その月の最初の週の曜日を見つけ、日数の差をとり、7で割りますしかし、これは一定の時間ではありません。たとえば、私は毎日9月7日の最初の日から最初の水曜日までに繰り返す必要があります。

この問題の解決策はありますか?

(興味がある人のために、私は、iCalendarの再発ルールの順序値を生成しようとしている、日付与えられ、各月のn日目の月間再発を生成し、この場合のルールは

ようなものになるだろう。
RRULE:FREQ=MONTHLY;INTERVAL=1;BYDAY=WE;BYSETPOS=2 

又は

RRULE:FREQ=MONTHLY;INTERVAL=1;BYDAY=2WE 

答えて

2

7で割って切り上げます。など

14常に月の第2回[平日]は、15日には常に月の第3回[平日]で、

1

、月の日を取る6を追加し、そして残りを捨て、7で割ます。

1

あなたは一日の情報を取得するために2つのfunctions- 1を必要とし、他のn番目の

Number.prototype.nth= function(){ 
    var n= Math.round(this), t= Math.abs(n%100), i= t%10; 
    if(i<4 && (t<4 || t> 20)){ 
     switch(i){ 
      case 1:return n+'st'; 
      case 2:return n+'nd'; 
      case 3:return n+'rd'; 
     } 
    } 
    return n+'th'; 
} 
Date.prototype.nthofMonth= function(){ 
    var today= this.getDate(),m=this.getMonth(), 
    day= ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 
    'Friday', 'Saturday'][this.getDay()], 
    month= ['January', 'February', 'March', 'April', 'May', 'June', 
    'July', 'August', 'September', 'October', 'November', 'December'][m]; 
    return [(m+1)+'-'+today,'the ', (Math.ceil((today)/7)).nth(), day, 'of', month, 'in', this.getFullYear()].join(' '); 
} 
+0

これは私が英語のフレーズとして探しているものを得るのに最適ですが、私は実際には 'Math.ceil((今日)/ 7)'の部分を探していました。もし私が今日脳の部分を持っていなかったら、私はおそらくそれを自分自身に遭遇しただろう。 – tad