使用javascript检测每个月的上周

时间:2010-05-26 14:58:04

标签: javascript datepicker date week-number gettime

在javascript中检测每个(当前)月的最后一周的方法。或者是本月的最后一个星期一?

9 个答案:

答案 0 :(得分:1)

使用date对象及其方法,您可以执行以下操作..

<强> 更新

到达本月最后一个星期一的完整计算可以压缩到

var d = new Date();
d.setMonth( d.getMonth() + 1 );
d.setDate(0);
lastmonday = d.getDate() - (d.getDay() - 1);
alert(lastmonday);

详细示例..

var now = new Date(); // get the current date

// calculate the last day of the month
if (now.getMonth() == 11 )  // if month is dec then go to next year and first month
{
    nextmonth = 0;
    nextyear = now.getFullYear() + 1;
}
else // otherwise go to next month of current year
{
  nextmonth = now.getMonth() + 1;
  nextyear = now.getFullYear();
}

var d = new Date( nextyear , nextmonth , 0); // setting day to 0 goes to last date of previous month
alert( d.getDay() ); // will alert the day of the week 0 being sunday .. you can calculate from there to get the first day of that week ..

答案 1 :(得分:1)

我建议获取当月的天数,然后从最后一天开始循环,直到getDay()给出一个星期一(1)或星期天(0)..基于你的一周开始的时间。一旦你得到你的开始日期...结束日期将是startDate + 7所以沿着这些线

我发现this有帮助:

//Create a function that determines how many days in a month
//NOTE: iMonth is zero-based .. Jan is 0, Feb is 2 and so on ...
function daysInMonth(iMonth, iYear)
{
    return 32 - new Date(iYear, iMonth, 32).getDate();
}

然后循环:

//May - should return 31
var days_in_month = daysInMonth(4, 2010);

var weekStartDate = null;
var weekEndDate = null;    

for(var i=days_in_month; i>0; i--)
{
  var tmpDate = new Date(2010, 4, i);
  //week starting on sunday
  if(tmpDate.getDay() == 0)
  {
    weekStartDate = new Date(tmpDate);
    weekEndDate = new Date(tmpDate.setDate(tmpDate.getDate() + 6));
    //break out of the loop
    break; 
  }
}

答案 2 :(得分:0)

使用getDay()获取月中最后一天的星期几并从中开始工作(从月份的天数减去该值应该可以解决问题。+ / - 1)。< / p>

答案 3 :(得分:0)

要确定是否是星期一,请使用.getDay() == 1。要确定它是否是该月的最后一天,请添加七天并比较月份:nextMonday.setDate(monday.getDate()+7); nextMonday.getMonth() == monday.getMonth();

答案 4 :(得分:0)

Javascript“Date”对象是你的朋友。

function lastOfThisMonth(whichDay) {
  var d= new Date(), month = d.getMonth();
  d.setDate(1); 
  while (d.getDay() !== whichDay) d.setDate(d.getDate() + 1);
  for (var n = 1; true; n++) {
    var nd = new Date(d.getFullYear(), month, d.getDate() + n * 7);
    if (nd.getMonth() !== month)
      return new Date(d.getFullYear(), month, d.getDate() + (n - 1) * 7).getDate();
  }
}

这将为您提供当月最后一天的日期(月份,如30),即所选日期(0到7)。

查找当月的最后取决于您的意思。如果你指的是最后一个完成周,那么(如果你的意思是星期日 - 星期六)找到最后一个星期六,然后减去6.如果你的意思是开始的最后一周一个月,找到最后一个星期天。

答案 5 :(得分:0)

您可能还希望在指定日期之前或之后找到第三个星期一或第一个星期二, 或者在两个日期之间的每个星期三举行会议。

Date.prototype.lastweek= function(wd, n){
    n= n || 1;
    return this.nextweek(wd, -n);
}
Date.prototype.nextweek= function(wd, n){
    if(n== undefined) n= 1;
    var incr= (n<0)? 1: -1,
    D= new Date(this),
    dd= D.getDay();
    if(wd=== undefined) wd= dd;
    if(dd!= wd) while(D.getDay()!= wd) D.setDate(D.getDate()+incr);
    D.setDate(D.getDate()+7*n);
    D.setHours(0, 0, 0, 0);
    return D;
}


function lastMondayinmonth(month, year){
    var day= new Date();
    if(!month) month= day.getMonth()+1;
    if(!year) year= day.getFullYear();
    day.setFullYear(year, month, 0);
    return day.lastweek(1);
}
alert(lastMondayinmonth())

答案 6 :(得分:0)

我发现这样的例子可以检测每周的最后一个星期一,但它不会检测到该月的最后一个星期一。也许它有助于找到更好的解决方案,代码看起来很短。

var dif, d = new Date(); // Today's date
dif = (d.getDay() + 6) % 7; // Number of days to subtract
d = new Date(d - dif * 24*60*60*1000); // Do the subtraction

alert(d); // Last monday.

答案 7 :(得分:0)

获取本月的最后一天:

/**
 * Accepts either zero, one, or two parameters.
 *     If zero parameters: defaults to today's date
 *     If one parameter: Date object
 *     If two parameters: year, (zero-based) month
 */
function getLastDay() {
    var year, month;
    var lastDay = new Date();

    if (arguments.length == 1) {
        lastDay = arguments[0];
    } else if (arguments.length > 0) {
        lastDay.setYear(arguments[0]);
        lastDay.setMonth(arguments[1]);
    }

    lastDay.setMonth(lastDay.getMonth() + 1);
    lastDay.setDate(0);

    return lastDay;
}

获取上周一:

/**
 * Accepts same parameters as getLastDay()
 */
function getLastMonday() {
    var lastMonday = getLastDay.apply(this, arguments);
    lastMonday.setDate(lastMonday.getDate() - (lastMonday.getDay() == 0 ? 6 : (lastMonday.getDay() - 1)));
    return lastMonday;
}

获得特定日期的一年中的一周:

/**
 * Accepts one parameter: Date object.
 * Assumes start of week is Sunday.
 */
function getWeek(d) {
    var jan1 = new Date(d.getFullYear(), 0, 1);
    return Math.ceil((((d - jan1) / (24 * 60 * 60 * 1000)) + jan1.getDay() + 1) / 7);
}

将它们组合在一起(假设您使用的是Firebug):

// Get the last day of August 2006:
var august2006 = new Date(2006, 7);
var lastDayAugust2006 = getLastDay(august2006);
console.log("lastDayAugust2006: %s", lastDayAugust2006);

// ***** Testing getWeek() *****
console.group("***** Testing getWeek() *****");
    // Get week of January 1, 2010 (Should be 1):
    var january12010Week = getWeek(new Date(2010, 0, 1));
    console.log("january12010Week: %s", january12010Week);

    // Get week of January 2, 2010 (Should still be 1):
    var january22010Week = getWeek(new Date(2010, 0, 2));
    console.log("january22010Week: %s", january22010Week);

    // Get week of January 3, 2010 (Should be 2):
    var january32010Week = getWeek(new Date(2010, 0, 3));
    console.log("january32010Week: %s", january32010Week);
console.groupEnd();
// *****************************

// Get the last week of this month:
var lastWeekThisMonth = getWeek(getLastDay());
console.log("lastWeekThisMonth: %s", lastWeekThisMonth);

// Get the last week of January 2007:
var lastWeekJan2007 = getWeek(getLastDay(2007, 0));
console.log("lastWeekJan2007: %s", lastWeekJan2007);

// Get the last Monday of this month:
var lastMondayThisMonth = getLastMonday();
console.log("lastMondayThisMonth: %s", lastMondayThisMonth);

// Get the week of the last Monday of this month:
var lastMondayThisMonthsWeek = getWeek(lastMondayThisMonth);
console.log("lastMondayThisMonthsWeek: %s", lastMondayThisMonthsWeek);

答案 8 :(得分:0)

好的,到目前为止我想出了这样的解决方案,让我有点自己的方式,并在这里提到一些事情。它工作正确,并始终返回当月的最后一个星期一。

//function that will help to check how many days in month
function daysInMonth(iMonth, iYear)
{
    return 32 - new Date(iYear, iMonth, 32).getDate();
}


var dif = null;
d = new Date(); // Today's date
countDays = daysInMonth(d.getMonth(),d.getFullYear()); //Checking number of days in current month
d.setDate(countDays); //setting the date to last day of the month
dif = (d.getDay() + 6) % 7; // Number of days to subtract
d = new Date(d - dif * 24*60*60*1000); // Do the subtraction
alert(d.getDate()); //finally you get the last monday of the current month