简体   繁体   English

获取本周的开始日期和结束日期(每周从星期一开始,以星期日结束)

[英]Get start date and end date of current week (week start from monday and end with sunday )

I want to display start date and end date of current week.我想显示本周的开始日期和结束日期。 (week start=monday, week end=sunday) I manage to display monday. (week start=monday, week end=sunday) 我设法显示星期一。

But I'm unable to get sunday date.但我无法得到星期天的约会。 Please post me if anyone has solution.如果有人有解决方案,请张贴我。

<script>
Date.prototype.getWeek = function(start)
{
        //Calcing the starting point
    start = start || 0;
    var today = new Date(this.setHours(0, 0, 0, 0));
    var day = today.getDay() - start;
    var date = today.getDate() - day;

        // Grabbing Start/End Dates
    var StartDate = new Date(today.setDate(date));
    var EndDate = new Date(today.setDate(date + 6));
    return [StartDate, EndDate];
}

// test code
var Dates = new Date().getWeek();
alert(Dates[0].toLocaleDateString() + ' to '+ Dates[1].toLocaleDateString())
</script>

I believe this works.我相信这有效。

The following function will do the trick:以下函数可以解决问题:

// return an array of date objects for start (monday)
// and end (sunday) of week based on supplied 
// date object or current date
function startAndEndOfWeek(date) {

  // If no date object supplied, use current date
  // Copy date so don't modify supplied date
  var now = date? new Date(date) : new Date();

  // set time to some convenient value
  now.setHours(0,0,0,0);

  // Get the previous Monday
  var monday = new Date(now);
  monday.setDate(monday.getDate() - monday.getDay() + 1);

  // Get next Sunday
  var sunday = new Date(now);
  sunday.setDate(sunday.getDate() - sunday.getDay() + 7);

  // Return array of date objects
  return [monday, sunday];
}

// Mon Nov 12 2012 00:00:00
// Sun Nov 18 2012 00:00:00
alert(startAndEndOfWeek(new Date(2012,10,14)).join('\n'));

Try this:尝试这个:

var current = new Date();     // get current date    
var weekstart = current.getDate() - current.getDay() +1;    
var weekend = weekstart + 6;       // end day is the first day + 6 
var monday = new Date(current.setDate(weekstart));  
var sunday = new Date(current.setDate(weekend));

SetDate will sets the day of the month. SetDate将设置一个月中的哪一天。 Using setDate during start and end of the month, will result in wrong week在月初和月底使用setDate会导致错误的一周

var curr = new Date("08-Jul-2014"); // get current date
var first = curr.getDate() - curr.getDay(); // First day is the day of the month - the day of the week
var last = first + 6; // last day is the first day + 6
var firstday = new Date(curr.setDate(first)); // 06-Jul-2014
var lastday = new Date(firstday .setDate(last)); // 12-Jul-2014

If setting Date is 01-Jul-2014, it will show firstday as 29-Jun-2014 and lastday as 05-Jun-2014 instead of 05-Jul-2014 .如果设置 Date 为 01-Jul-2014,它将显示第一天为 29-Jun-2014,最后一天显示为 05-Jun-2014 而不是 05-Jul-2014 So to overcome this issue I used所以为了克服这个问题,我使用了

var curr = new Date();
day = curr.getDay();
firstday = new Date(curr.getTime() - 60*60*24* day*1000); // will return firstday (i.e. Sunday) of the week
lastday = new Date(firstday.getTime() + 60 * 60 *24 * 6 * 1000); // adding (60*60*6*24*1000) means adding six days to the firstday which results in lastday (Saturday) of the week

In the other examples you will have a problem when sunday falls in other month.在其他示例中,当星期日落在其他月份时,您会遇到问题。 This should solve the problem:这应该可以解决问题:

var today, todayNumber, mondayNumber, sundayNumber, monday, sunday;
    today = new Date();
    todayNumber = today.getDay();
    mondayNumber = 1 - todayNumber;
    sundayNumber = 7 - todayNumber;
    monday = new Date(today.getFullYear(), today.getMonth(), today.getDate()+mondayNumber);
    sunday = new Date(today.getFullYear(), today.getMonth(), today.getDate()+sundayNumber);

Based on RobG's answer, I ended up with this to get week to start on midnight Monday and end on Sunday 23:59:59.999.根据 RobG 的回答,我最终得到了这一周,从周一午夜开始,到周日 23:59:59.999 结束。

  var weekMap = [6, 0, 1, 2, 3, 4, 5];

  function startAndEndOfWeek(date) {
    var now = new Date(date);
    now.setHours(0, 0, 0, 0);
    var monday = new Date(now);
    monday.setDate(monday.getDate() - weekMap[monday.getDay()]);
    var sunday = new Date(now);
    sunday.setDate(sunday.getDate() - weekMap[sunday.getDay()] + 6);
    sunday.setHours(23, 59, 59, 999);
    return [monday, sunday];
  }

Slightly Modified answer of @ReadWriteCode, this also works successfully with different months. @ReadWriteCode 稍作修改的答案,这也适用于不同的月份。

Date.prototype.getWeek = function()
{
    var today = new Date();
    var day = today.getDay();
    var date = today.getDate() - day;

        // Grabbing Start/End Dates
    var StartDate = new Date();
    var EndDate = new Date();
    StartDate.setHours(0,0,0,0); EndDate.setHours(0,0,0,0);
    StartDate.setDate(today.getDate()-day);
    EndDate.setDate(today.getDate()-day+6);
    return {
        startDate:StartDate,
        endDate: EndDate
    };
} 
var thisWeekDates=new Date().getWeek();

Using https://momentjs.com makes it more simple.使用https://momentjs.com使其更简单。

  1. To get week starting with Sunday and ending with Saturday , then use: moment().startOf("week").toDate() and moment().endOf("week").toDate()要从星期日开始到星期六结束,请使用: moment().startOf("week").toDate() 和 moment().endOf("week").toDate()

  2. To get week starting with Monday and ending with Sunday , then use: moment().startOf("isoWeek").toDate() and moment().endOf("isoWeek").toDate()要获得从 Monday 开始到 Sunday 的一周,然后使用: moment().startOf("isoWeek").toDate() 和 moment().endOf("isoWeek").toDate()

Tried this on moment v2.18.1, it works.在moment v2.18.1 上试过这个,它有效。

Hope this helps, for more you can refer moment docs.希望这会有所帮助,有关更多信息,您可以参考 moment 文档。

I hope this will work for you :我希望这对你有用:

Date.prototype.getWeekEndDate = function () {
    diff = 6 - this.getDay();
    if (diff < 0) {
        diff += 6;
    }
    this.setDate(this.getDate() + (1 * diff));
    return this;
}
Date.prototype.getWeekStartDate = function () {
    diff = this.getDay() - 6;
    if (diff < 0) {
        diff += 7;
    }
    return this.setDate(this.getDate() + (-1 * diff));
}

These method will return start date and end date of the week.这些方法将返回一周的开始日期和结束日期。

  1. Different months issues is also fixed with below code.下面的代码也修复了不同月份的问题。
  2. Added format "M.dd.yyyy" function.添加格式“M.dd.yyyy”功能。

    function startAndEndOfWeek(setDate) { var day = null;函数 startAndEndOfWeek(setDate) { var day = null; var date = null;var month = null;var year = null; var date = null;var month = null;var year = null; var mon = null; var mon = null; var tue = null; var tue = null; var wed = null; var wed = null; var thu = null; var 周四 = 空; var fri = null; var fri = null; var sat = null; var sat = null; var sun = null; var sun = null;

     var now = setDate ? new Date(setDate) : new Date(); now.setHours(0,0,0,0); var monday = new Date(now); var tuesday = new Date(now); var wednesday = new Date(now); var thursday = new Date(now); var friday = new Date(now); var saturday = new Date(now); var sunday = new Date(now); if(new Date(now).getDay() == 0) { monday.setDate(monday.getDate() - 6); tuesday.setDate(tuesday.getDate() - 5); wednesday.setDate(wednesday.getDate() - 4); thursday.setDate(thursday.getDate() - 3); friday.setDate(friday.getDate() - 2); saturday.setDate(saturday.getDate() - 1); sunday.setDate(sunday.getDate() - 0); } else { monday.setDate(monday.getDate() - monday.getDay() + 1); tuesday.setDate(tuesday.getDate() - tuesday.getDay() + 2); wednesday.setDate(wednesday.getDate() - wednesday.getDay() + 3); thursday.setDate(thursday.getDate() - thursday.getDay() + 4); friday.setDate(friday.getDate() - friday.getDay() + 5); saturday.setDate(saturday.getDate() - saturday.getDay() + 6); sunday.setDate(sunday.getDate() - sunday.getDay() + 7); } date = monday.getDate(); month = monday.getMonth(); year = monday.getFullYear(); mon = getMonthValue(month) + "." + getDateValue(date) + "." + year; date = tuesday.getDate(); month = tuesday.getMonth(); year = tuesday.getFullYear(); tue = getMonthValue(month) + "." + getDateValue(date) + "." + year; date = wednesday.getDate(); month = wednesday.getMonth(); year = wednesday.getFullYear(); wed = getMonthValue(month) + "." + getDateValue(date) + "." + year; date = thursday.getDate(); month = thursday.getMonth(); year = thursday.getFullYear(); thu = getMonthValue(month) + "." + getDateValue(date) + "." + year; date = friday.getDate(); month = friday.getMonth(); year = friday.getFullYear(); fri = getMonthValue(month) + "." + getDateValue(date) + "." + year; date = saturday.getDate(); month = saturday.getMonth(); year = saturday.getFullYear(); sat = getMonthValue(month) + "." + getDateValue(date) + "." + year; date = sunday.getDate(); month = sunday.getMonth(); year = sunday.getFullYear(); sun = getMonthValue(month) + "." + getDateValue(date) + "." + year; return [mon, tue , wed, thu, fri, sat, sun];

    } }

    function getMonthValue(month) { switch(month) { case 0: return "Jan"; function getMonthValue(month) { switch(month) { case 0: return "Jan"; break;休息; case 1: return "Feb";情况1:返回“二月”; break;休息; case 2: return "Mar";情况2:返回“Mar”; break;休息; case 3: return "Apr";情况3:返回“Apr”; break;休息; case 4: return "May";情况4:返回“May”; break;休息; case 5: return "Jun";案例5:返回“君”; break;休息; case 6: return "Jul";情况6:返回“Jul”; break;休息; case 7: return "Aug";情况7:返回“Aug”; break;休息; case 8: return "Sep";案例8:返回“Sep”; break;休息; case 9: return "Oct";案例9:返回“Oct”; break;休息; case 10: return "Nov";案例10:返回“Nov”; break;休息; case 11: return "Dec";案例11:返回“Dec”; break;休息; } } function getDateValue(day) { if(parseInt(day) < 10) { return "0" + day; } } function getDateValue(day) { if(parseInt(day) < 10) { return "0" + day; } return day; } 返回日; } }

as in this link如在此链接中

function endOfWeek(date)
  {

    var lastday = date.getDate() - (date.getDay() - 1) + 6;
    return new Date(date.setDate(lastday));

  }

dt = new Date(); 

console.log(endOfWeek(dt).toString());

Pure vanilla JS.纯香草JS。 no third party libraries.没有第三方库。 Returns Sunday to Sunday 00am.周日至周日 00am 返回。

const now = new Date()
const startOfWeek = new Date(now.getFullYear(), now.getMonth(), now.getDate() - now.getDay())
const endOfWeek = new Date(now.getFullYear(), now.getMonth(), startOfWeek.getDate() + 7)

Check code snippet for week start from monday to sunday检查从星期一到星期日开始的一周的代码片段

const curr = new Date(); // get current date
const currentWeekDay = curr.getDay();
const lessDays = currentWeekDay === 0 ? 6 : currentWeekDay - 1; // handle sunday to monday week start day
const wkStart = new Date(new Date(curr).setDate(curr.getDate() - lessDays));
const wkEnd = new Date(new Date(wkStart).setDate(wkStart.getDate() + 6));

You can modify the return value to meet your needs, right now it just returns the full object of Sunday.您可以修改返回值以满足您的需要,现在它只返回周日的完整对象。

Date.prototype.endWeek=function(){
  return new Date(this.getFullYear(), this.getMonth(),(7-this.getDay())+this.getDate());
}

//call like this
var myDate = new Date(); 
var Sunday = myDate.endWeek();
alert("Sunday falls on "+ Sunday.getDate());

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM