2

私は、月の第 2 月曜日にミーティングを行うグループと協力しており、彼らは次のミーティングの日付をサイトに反映させたいと考えています。今月の第 2 月曜日に表示するスクリプトがありますが、if else ステートメントに問題があります。今月の日付だけでなく、次のイベントを反映する必要があります。すなわち。今月のイベント日は 2012 年 8 月 13 日で、現在の日付 (2012 年 8 月 21 日) を過ぎています。次の利用可能な日付である 2012 年 9 月 10 日に移動したいと思います。以下は、これまでのコードです。

<script type="text/javascript">
Date.prototype.x = function () {
var d = new Date (this.getFullYear(), this.getMonth(), 1, 0, 0, 0)
d.setDate (d.getDate() + 15 - d.getDay())
return d
}
Date.prototype.getSecondMonday = function () {
var d = new Date (this.getFullYear(), 1, 1, 0, 0, 0)
d.setMonth(this.getMonth()+1)
d.setDate (d.getDate() + 15 - d.getDay())
return d
}
var today = new Date()
var todayDate = today.toDateString()

if (Date.prototype.x>todayDate)
  {
document.write (new Date().x().toDateString());
  }
else
  {
document.write (new Date().getSecondMonday().toDateString());
  }
</script>
4

2 に答える 2

0

現在の月の第 2 月曜日の日付が現在の日付より前の場合は、翌月の 1 日に関数を呼び出します。

Date.prototype.nextSecondMonday= function(){
    var temp= new Date(this), d= temp.getDate(), n= 1;
    while(temp.getDay()!= 1) temp.setDate(++n);
    temp.setDate(n+7);
    if(d>temp.getDate()){
        temp.setMonth(temp.getMonth()+1, 1);
        return temp.nextSecondMonday();
    }
    return temp.toLocaleDateString();
}


/*  tests


var x= new Date(2012, 7, 22);
x.nextSecondMonday()
Monday, September 10, 2012

var x= new Date(2012, 7, 12);
x.nextSecondMonday()
Monday, August 13, 2012
*/
于 2012-08-22T05:02:10.857 に答える
0

関数が不足()しているため、x実行されていません。:) する必要があります:

if (Date.prototype.x() > todayDate) 

更新: これは、クリーンアップされたロジックの修正/動作バージョンです (おそらく過度にコメントされていますが、誰かが必要とする場合は少なくともそこにあると思います)。

Date.prototype.nextSecondMonday = function (){
    // Load the month.
    var target = new Date(this.getFullYear(), this.getMonth(), 1, 0, 0, 0);
    var today = new Date();

    // Check to see if the 1st is on a Monday.
    var isMonday = (target.getDay() == 1);

    // Jump ahead two weeks from the 1st, and move back the appropriate number of days to reach the preceding Monday.
    // i.e. If the 1st is a Thursday, we would move back three days.
    var targetDate = 15 - (target.getDay() - 1);

    // Quick adjustment if the 1st is a Monday.
    if (isMonday) targetDate -= 7;

    // Move to the second Monday in the month.   
    target.setDate(targetDate);

    // Second Monday is before today's date, so find the second Monday next month.
    if (today > target) {
        //return "<em>" + target.toLocaleDateString() + " is in the past...</em>";
        target.setMonth(target.getMonth() + 1);
        return target.nextSecondMonday();
    }

    // Format and return string date of second Monday.
    return target.toLocaleDateString();
}


// Working test for the year 2012.
//for (var i = 0; i < 12; i++)
    //$("#log").append(new Date(2012, i).nextSecondMonday() + "<br /><br />");
于 2012-08-22T01:24:12.660 に答える