【问题标题】:Javascript Date for the Second Monday of the month每月第二个星期一的 Javascript 日期
【发布时间】:2012-08-22 01:13:24
【问题描述】:

我正在与一个在每个月的第二个星期一开会的小组合作,他们希望他们的网站反映下一次会议的日期。我有这个月的第二个星期一要显示的脚本,但是我遇到了 if else 语句的问题。我需要它来反映下一个即将发生的事件,而不仅仅是这个月的日期。 IE。本月的事件日期是 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>

【问题讨论】:

    标签: javascript date


    【解决方案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
    */
    

    【讨论】:

      【解决方案2】:

      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 年 9 月 10 日,但我想确保这不仅仅是误报。
      • 我想我应该摆弄这个,因为它很长?对不起,如果是这样。
      • 这太棒了!感谢您的cmets,您的逻辑很有意义!谢谢!我知道这是一个菜鸟问题,但是使用您在此处创建的函数我将如何将其写入屏幕?
      • 您可以将结果分配给一个变量,然后根据需要输出它。 var secondMondayDateString = new Date().nextSecondMonday();,然后您可以将其与 getElementById 或 jQuery 或 alert 或不显示/放置值的内容一起使用。 (不用担心,不客气!)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多