有没有一种简单的方法可以找到当月发生的一周中某一天的最后日期

时间:2013-09-25 01:57:26

标签: javascript jquery asp-classic dayofweek

我正在尝试显示当月最后一个星期三的日期...以便它会自动更改为下个月发生时的正确日期。 (因此,不必说:“每个月的最后一个星期三”,我可以动态地给出实际日期。)

例如,我希望这个日期在本月的9月25日星期三显示在网页上,然后显示为下个月10月30日星期三。

额外的额外解决方案是,如果我可以在上一个日期过去后显示下个月的日期。在上面的例子中,当前日期是9月26日至30日(上一个星期三之后的任何日期,但仍然在同一个月)..日期将显示10月30日的下一个表现日期。

如果解决方案是通过html,javascript / jquery或asp。

,那将是很棒的

谢谢, SunnyOz

4 个答案:

答案 0 :(得分:1)

这取决于您的“简单”标准。这是一个简单的功能,可以根据需要执行,它是5行工作代码,可以减少到4,但如果完成则会失去一点清晰度:

function lastDayInMonth(dayName, month, year) {
  // Day index map - modify to suit whatever you want to pass to the function
  var dayNums = {Sunday: 0, Monday:1, Tuesday:2, Wednesday:3, 
                 Thursday:4, Friday:5, Saturday:6};

  // Create a date object for last day of month
  var d = new Date(year, month, 0);

  // Get day index, make Sunday 7 (could be combined with following line)
  var day = d.getDay() || 7;

  // Adjust to required day
  d.setDate(d.getDate() - (7 - dayNums[dayName] + day) % 7);

  return d;
}

您可以将地图更改为任何内容,只需确定要传递给可以映射到ECMAScript日期编号的函数(日期名称,缩写,索引等)。

修改

所以,如果总是希望显示本月的最后一个星期三或下个月,如果它已通过:

function showLastWed() {
  var now = new Date();
  var lastWedOfThisMonth = lastDayInMonth('Wednesday', now.getMonth()+1, now.getFullYear());
  if (now.getDate() > lastWedOfThisMonth().getDate()) {
    return lastDayInMonth('Wednesday', now.getMonth()+2, now.getFullYear());
  } else {
    return lastWedOfThisMonth;
  }
}

请注意,函数需要日历月号(Jan = 1,Feb = 2等),而 getMonth 方法返回ECMAScript月份索引(Jan = 0,Feb = 1等) 。)因此+1+2获取日历月号。

答案 1 :(得分:0)

您可以使用javascript库,例如moment.js: http://momentjs.com/

然后得到它:

moment().add('months', 1).date(1).subtract('days', 1).day(-4)

答案 2 :(得分:0)

我更喜欢像@Aralo建议的那样使用像moment.js这样的抽象。但是,要在原始JavaScript中执行此操作,您可以使用这样的代码...创建一个可以在一个月内获取所有日期的函数。然后反向遍历列表以查找最后一天的数字。星期三是3

function getDaysInMonth(date) {
  var dayCursor = new Date(today.getFullYear(), today.getMonth()); // first day of month
  var daysInMonth = [];

  while(dayCursor.getMonth() == date.getMonth()) {
    daysInMonth.push(new Date(dayCursor));
    dayCursor.setDate(dayCursor.getDate() + 1);
  }

  return daysInMonth;
}

function findLastDay(date, dayNumber) {
    var daysInMonth = getDaysInMonth(date);
    for(var i = daysInMonth.length - 1; i >= 0; i--) {
      var day = daysInMonth[i];
      if(day.getDay() === dayNumber) return day;
    }
}

然后,要获得当月的最后一个星期三:

var today = new Date();
var lastWednesday = findLastDay(today, 3);

答案 3 :(得分:0)

以下是JS中的一种方法:

var monthLengths = [ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ];

function getLastWednesday() {
  var d = new Date();
  var month = d.getMonth();
  var lastDay = monthLengths[month];
  // mind leap years
  if (month == 1) {
    var year = d.getFullYear();
    var isLeapYear = ((year % 4 == 0 && year % 100 > 0) || year % 400 == 0);
    if (isLeapYear) lastDay++;
  }
  // get the weekday of last day in the curent mont
  d.setDate(lastDay);
  var weekday = d.getDay();
  // calculate return value (wednesday is day 3)
  if (weekday == 3) {
    return lastDay;
  }
  else {
    var offset = weekday - 3;
    if (offset < 0) offset += 7;
    return lastDay - offset;
  }
}