How to get first and last day of the current week in JavaScript
Asked Answered
W

31

151

I have today = new Date(); object. I need to get first and last day of the current week. I need both variants for Sunday and Monday as a start and end day of the week. I am little bit confuse now with a code. Can your help me?

Wallop answered 6/3, 2011 at 12:10 Comment(0)
C
280
var curr = new Date; // 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)).toUTCString();
var lastday = new Date(curr.setDate(last)).toUTCString();

firstday
"Sun, 06 Mar 2011 12:25:40 GMT"
lastday
"Sat, 12 Mar 2011 12:25:40 GMT"

This works for firstday = sunday of this week and last day = saturday for this week. Extending it to run Monday to sunday is trivial.

Making it work with first and last days in different months is left as an exercise for the user

Corking answered 6/3, 2011 at 12:27 Comment(17)
thanks, how I can make this but when the first day is monday ?Paleozoology
var first = curr.getDate() - curr.getDay() +1;Paleozoology
To make it work when you have different months - var lastday = new Date(curr.setDate(first.getDate()+6)).toUTCString();Irritated
To make it work for every month including Feb just put the line of lastday before firstday from the above code and it will work for all months.Pyongyang
A similar code to the @Rayons answer, but this will work for even for other months and years also var curr = new Date('2014-10-01T00:00:00'); // 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 firstday = new Date(curr.setDate(first)).toUTCString(); lastday = new Date(curr.setDate(curr.getDate()+6)).toUTCString(); just I have corrected the @RichardN's code, which is having a small mistakeAdulterant
The accepted answer does not set the time to 00:00:00 and 23:59:59, I posted another one using Moment.jsPaulin
This leaves a case for when the day of the month is before 7th, for example : 7/3/2015, var first = curr.getDate() - curr.getDay(); // First day is the day of the month - the day of the week -- this is a negative integer, so this needs to be checked.Concinnity
I ran in the problem with different months, and the smallest change to fix it is to make the two lines with "var firstday..." and "var lastday..." to var firstday = new Date((new Date(curr)).setDate(first)).toUTCString(); var lastday = new Date((new Date(curr)).setDate(last)).toUTCString();Firebrand
The date-fns library handles this succinctly, with one line (below). We very much prefer it to Moment.js because it treats all dates immutably, and allows passing of standard JS Date objects.Desist
if today date is 29 Aug 2018 then first = 26 and last = 32 as per your code . it should be 31 for last week of month. its not workingAdermin
What if you only know the given year and the week (for example the 17th week of 2018)?Jetty
This code not working if our week comes in between 2 months. Like, 31-01-2021 from month Jan. And 06-02-2021 from the month of Feb. The above code gives the week start date is correct but it gives 06-01 instead of 06-02 as of the week end date.Bezique
I find "left as an exercise for the user" to make this answer actually worse than @SHIVA 's answer below which works regardless of month.Biosphere
This doesn't work like if the month changes in the mid of the week it doesn't give correct datesVictimize
Hello! The function works pretty well, it's finding the start day of a week, but what if you want the weeks of a single month? That is, let's say it's September and you want to check for September 1st, and the first of September started on a Thursday, ideally you would return the week of that month. It would be something like the first day of the week in the month "Thursday, 01 Sep 2022 12:25:40 GMT", is it possible to do that?Hoofbound
Above function fails when week across month conditions. function getWeekStartEnd(date) { const startOfWeek = new Date(date); startOfWeek.setDate(startOfWeek.getDate() - startOfWeek.getDay()); const endOfWeek = new Date(date); endOfWeek.setDate(endOfWeek.getDate() + (6 - endOfWeek.getDay())); return { start: startOfWeek, end: endOfWeek }; } const date = new Date(); const week = getWeekStartEnd(date); console.log(week.start, week.end);Aquilar
ABOVE ANSWER IS WRONG !!, when a week is across a month it shows wrong answer. please find my solution below.Aquilar
P
91

Be careful with the accepted answer, it does not set the time to 00:00:00 and 23:59:59, so you can have problems.

You can use a third party date library to deal with dates. For example:

var startOfWeek = moment().startOf('week').toDate();
var endOfWeek   = moment().endOf('week').toDate();

EDIT: As of September 2020, using Moment is discouraged for new projects (blog post)

Another popular alternative is date-fns.

Paulin answered 14/11, 2014 at 2:39 Comment(8)
If you use moment use "isoweek" instead of "week" otherwise it will start the week from sunday and it will end it with saturday so var startOfWeek = moment().startOf('isoweek').toDate(); var endOfWeek = moment().endOf('isoweek').toDate();Nedry
Thanks you guys saved my time :-)Faunus
To account for the time without using moment.js, use Date.setHours: curr.setHours(0,0,0,0); lastday.setHours(23,59,59,59);Solis
is must be 'isoWeek' not 'isoweek'Bickart
Love moment js, one of the best date/time libs out there!Breaststroke
Implementing the method detailed by @Nedry in 2019 in version 2.4.0, the only difference is that "isoweek" is now "isoWeek"Bicentenary
Moment.js startOf('week') is "locale aware", so it might be Sunday or Monday depending on system settings or browser used.Unsnap
FYI: "Moment.js is a legacy project, now in maintenance mode. In most cases, you should choose a different library." github.com/moment/moment#project-statusDesist
A
70

You can also use following lines of code to get first and last date of the week:

var curr = new Date;
var firstday = new Date(curr.setDate(curr.getDate() - curr.getDay()));
var lastday = new Date(curr.setDate(curr.getDate() - curr.getDay()+6));

Hope it will be useful..

Aetna answered 2/11, 2012 at 7:11 Comment(2)
Yes, But @totymedii , Raynos answer is wrong for 1 March 2019, i have proof of it, firstday :: Sun, 24 Feb 2019 08:33:48 GMT last day :: Sat, 02 Feb 2019 08:33:48 GMTIncertitude
If you want to get the Previous Week simply do this var lastday = new Date(curr.setDate(curr.getDate() - curr.getDay()- 6));Standpoint
D
47

The excellent (and immutable) date-fns library handles this most concisely:

const start = startOfWeek(date);
const end = endOfWeek(date);

Default start day of the week is Sunday (0), but it can be changed to Monday (1) like this:

const start = startOfWeek(date, {weekStartsOn: 1});
const end = endOfWeek(date, {weekStartsOn: 1});
Desist answered 6/6, 2017 at 14:13 Comment(2)
plus 1 for using date-fns and not momentHallucinosis
You can use also use startOfISOWeek and endOfISOWeek to get Monday-Sunday as the start and end of the week, not Sunday - Saturday.Incrassate
R
15

Here's a quick way to get first and last day, for any start day. knowing that:

1 day = 86,400,000 milliseconds.

JS dates values are in milliseconds

Recipe: figure out how many days you need to remove to get the your week's start day (multiply by 1 day's worth of milliseconds). All that is left after that is to add 6 days to get your end day.

var startDay = 1; //0=sunday, 1=monday etc.
var d = now.getDay(); //get the current day
var weekStart = new Date(now.valueOf() - (d<=0 ? 7-startDay:d-startDay)*86400000); //rewind to start day
var weekEnd = new Date(weekStart.valueOf() + 6*86400000); //add 6 days to get last day
Rowell answered 20/2, 2012 at 4:49 Comment(1)
This doesn't work because days are not always 86,400,000 milliseconds long thanks to DST...Judiciary
G
14

Small change to @Chris Lang answer. if you want Monday as the first day use this.

Date.prototype.GetFirstDayOfWeek = function() {
    return (new Date(this.setDate(this.getDate() - this.getDay()+ (this.getDay() == 0 ? -6:1) )));
}
Date.prototype.GetLastDayOfWeek = function() {
    return (new Date(this.setDate(this.getDate() - this.getDay() +7)));
}

var today = new Date();

alert(today.GetFirstDayOfWeek());

alert(today.GetLastDayOfWeek());

Thaks @Chris Lang

Grip answered 4/6, 2020 at 21:0 Comment(1)
This should be the correct answer. It works across months.Biosphere
O
6

This works across year and month changes.

Date.prototype.GetFirstDayOfWeek = function() {
    return (new Date(this.setDate(this.getDate() - this.getDay())));
}

Date.prototype.GetLastDayOfWeek = function() {
    return (new Date(this.setDate(this.getDate() - this.getDay() +6)));
}

var today = new Date();

alert(today.GetFirstDayOfWeek());

alert(today.GetLastDayOfWeek());
Optometrist answered 20/11, 2015 at 19:2 Comment(3)
Now that seems redundant. smhOptometrist
And for weeks start on Monday?Unsnap
@Unsnap Please refer thisGrip
G
4

SetDate will sets the day of the month. Using setDate during start and end of the month,will result in wrong week

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(curr.setDate(last)); //12-Jul-2014

If u 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

So 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 (ie 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
Griffy answered 8/7, 2014 at 6:37 Comment(1)
"Using setDate during start and end of the month,will result in wrong week" not if used correctly.Unsnap
M
3

You could do something like this

var today = new Date();
var startDay = 0; 
var weekStart = new Date(today.getDate() - (7 + today.getDay() - startDay) % 7);
var weekEnd = new Date(today.getDate() + (7 - today.getDay() - startDay) % 7);

Where startDay is a number from 0 to 6 where 0 stands for Sunday (ie 1 = Monday, 2 = Tuesday, etc).

Mantelletta answered 6/3, 2011 at 12:28 Comment(0)
M
3
var dt = new Date()  //current date of week
var currentWeekDay = dt.getDay();
var lessDays = currentWeekDay == 0 ? 6 : currentWeekDay-1
var wkStart = new Date(new Date(dt).setDate(dt.getDate()- lessDays));
var wkEnd = new Date(new Date(wkStart).setDate(wkStart.getDate()+6));

This will be useful for any date scenario.

Mathamathe answered 3/5, 2017 at 5:26 Comment(0)
V
2

krtek's method has some wrong,I tested this

var startDay = 0; 
var weekStart = new Date(today.getDate() - (7 + today.getDay() - startDay) % 7);
var weekEnd = new Date(today.getDate() + (6 - today.getDay() - startDay) % 7);

it works

Virtue answered 27/6, 2013 at 3:25 Comment(0)
F
2

I recommend to use Moment.js for such cases. I had scenarios where I had to check current date time, this week, this month and this quarters date time. Above an answer helped me so I thought to share rest of the functions as well.

Simply to get current date time in specific format

        case 'Today':
        moment().format("DD/MM/YYYY h:mm A");

        case 'This Week':
          moment().endOf('isoweek').format("DD/MM/YYYY h:mm A");

Week starts from Sunday and ends on Saturday if we simply use 'week' as parameter for endOf function but to get Sunday as the end of the week we need to use 'isoweek'.

        case 'This Month':
          moment().endOf('month').format("DD/MM/YYYY h:mm A");

        case 'This Quarter':
          moment().endOf('quarter').format("DD/MM/YYYY h:mm A");

I chose this format as per my need. You can change the format according to your requirement.

Faunus answered 18/11, 2015 at 17:7 Comment(1)
Moment.js is now a legacy project and won't receive further significant updates: github.com/moment/moment#project-statusDesist
A
2
        //get start of week; QT
    function _getStartOfWeek (date){
        var iDayOfWeek = date.getDay();
        var iDifference = date.getDate() - iDayOfWeek + (iDayOfWeek === 0 ?  -6:1);

        return new Date(date.setDate(iDifference));
    }, 

    function _getEndOfWeek(date){
        return new Date(date.setDate(date.getDate() + (7 - date.getDay()) === 7 ? 0 : (7 - date.getDay()) ));
    }, 

*current date == 30.06.2016 and monday is the first day in week.

It also works for different months and years. Tested with qunit suite:

enter image description here

        QUnit.module("Planung: Start of week");
    QUnit.test("Should return start of week based on current date", function (assert) {
        var startOfWeek = Planung._getStartOfWeek(new Date());
        assert.ok( startOfWeek , "returned date: "+ startOfWeek);
    });

    QUnit.test("Should return start of week based on a sunday date", function (assert) {
        var startOfWeek = Planung._getStartOfWeek(new Date("2016-07-03"));
        assert.ok( startOfWeek , "returned date: "+ startOfWeek);
    });

    QUnit.test("Should return start of week based on a monday date", function (assert) {
        var startOfWeek = Planung._getStartOfWeek(new Date("2016-06-27"));
        assert.ok( startOfWeek , "returned date: "+ startOfWeek);
    });

    QUnit.module("Planung: End of week");
    QUnit.test("Should return end of week based on current date", function (assert) {
        var endOfWeek = Planung._getEndOfWeek(new Date());
        assert.ok( endOfWeek , "returned date: "+ endOfWeek);
    });
    QUnit.test("Should return end of week based on sunday date with different month", function (assert) {
        var endOfWeek = Planung._getEndOfWeek(new Date("2016-07-03"));
        assert.ok( endOfWeek , "returned date: "+ endOfWeek);
    });
    QUnit.test("Should return end of week based on monday date with different month", function (assert) {
        var endOfWeek = Planung._getEndOfWeek(new Date("2016-06-27"));
        assert.ok( endOfWeek , "returned date: "+ endOfWeek);
    });
    QUnit.test("Should return end of week based on 01-06-2016 with different month", function (assert) {
        var endOfWeek = Planung._getEndOfWeek(new Date("2016-06-01"));
        assert.ok( endOfWeek , "returned date: "+ endOfWeek);
    });
    QUnit.test("Should return end of week based on 21-06-2016 with different month", function (assert) {
        var endOfWeek = Planung._getEndOfWeek(new Date("2016-06-21"));
        assert.ok( endOfWeek , "returned date: "+ endOfWeek);
    });
    QUnit.test("Should return end of week based on 28-12-2016 with different month and year", function (assert) {
        var endOfWeek = Planung._getEndOfWeek(new Date("2016-12-28"));
        assert.ok( endOfWeek , "returned date: "+ endOfWeek);
    });
    QUnit.test("Should return end of week based on 01-01-2016 with different month and year", function (assert) {
        var endOfWeek = Planung._getEndOfWeek(new Date("2016-01-01"));
        assert.ok( endOfWeek , "returned date: "+ endOfWeek);
    });
Austerity answered 30/6, 2016 at 11:47 Comment(0)
H
2

Just using pure javascript, you can use the function below to get first day and last day of a week with freely setting day for start of week.

var weekday = [];
weekday[0] = "Sunday";
weekday[1] = "Monday";
weekday[2] = "Tuesday";
weekday[3] = "Wednesday";
weekday[4] = "Thursday";
weekday[5] = "Friday";
weekday[6] = "Saturday";

function getFirstDayOfWeek(date, from) {
    //Default start week from 'Sunday'. You can change it yourself.
    from = from || 'Sunday'; 
    var index = weekday.indexOf(from);
    var start = index >= 0 ? index : 0;

    var d = new Date(date);
    var day = d.getDay();
    var diff = d.getDate() - day + (start > day ? start - 7 : start);
    d.setDate(diff);
    return d;
};

Last day of week is just 6 days after first day of week

function getLastDayOfWeek(date, from) {
    from = from || 'Sunday';
    var index = weekday.indexOf(from);
    var start = index >= 0 ? index : 0;

    var d = new Date(date);
    var day = d.getDay();
    var diff = d.getDate() - day + (start > day ? start - 1 : 6 + start);
    d.setDate(diff);
    return d;
};

Test:

getFirstDayOfWeek('2017-10-16'); //--> Sun Oct 15 2017
getFirstDayOfWeek('2017-10-16', 'Monday'); //--> Mon Oct 16 2017
getFirstDayOfWeek('2017-10-16', 'Tuesday'); //--> Tue Oct 10 2017
Hydrocele answered 16/10, 2017 at 10:4 Comment(0)
A
2

The biggest issue when the given date's week is in-between two months. (Like 2022-07-01, it's the 5th day of the week.) Using getDay function we check if the week is in-between months.

Note: getDay() function identifies week start day as sunday, so it'll return 0 for sunday.

var curr =  new  Date(); // get current date
var weekdaynum = curr.getDay();
if(weekdaynum ==  0){ //to change sunday to the last day of the week
weekdaynum =  6;
} else{
weekdaynum = weekdaynum-1;
}
var firstweek = curr.getDate() - weekdaynum;
var lastweek = firstweek +  6; // last day is the first day + 6


if((curr.getDate()-weekdaynum) <=  0){
var firstweek_lasmonth_lastdate = new Date(currweek.getFullYear(),currweek.getMonth(), 0);
var firstweek_diff = firstweek_lasmonth_lastdate.getDate()-Math.abs(firstweek);
var firstweekday = new Date(currweek.getFullYear(),currweek.getMonth()-1,firstweek_lasmonth_lastdate.getDate()+firstweek_diff);
var lastweekday = new Date(currweek.getFullYear(),currweek.getMonth()-1,firstweek_lasmonth_lastdate.getDate()+firstweek_diff+7);
} else{
var firstweekday =  new  Date(curr.setDate(firstweek));
var lastweekday =  new  Date(curr.setDate(lastweek));
}

So this will return (given date is: 2022/07/01):

firstweekday = Mon Jun 27 2022 00:00:00 
lastweekday = Sun Jul 03 2022 00:00:00

Hope this helps.

Anallise answered 30/6, 2022 at 21:48 Comment(0)
K
1

Although the question is seeming as obsolete I have to point out a problem.
Question: What will happen at 1st January 2016?
I think most of the above solutions calculate start of week as 27.12.2016. For this reason I think, the correct calculation should be like the below simply;

var d = new Date(),
    dayInMs = 1000 * 60 * 60 * 24,
    weekInMs = dayInMs * 7,
    startOfToday = new Date(d.getFullYear(), d.getMonth(), d.getDate()).valueOf(),
    todayElapsedTime = d.valueOf() - startOfToday,
    dayDiff = d.getDay() * dayInMs,
    dateDiff = dayDiff + todayElapsedTime, 
    // finally
    startOfWeek = d.valueOf() - dateDiff,
    endOfWeek = startOfWeek + weekInMs - 1;
Kith answered 3/9, 2015 at 15:37 Comment(0)
T
1

JavaScript

function getWeekDays(curr, firstDay = 1 /* 0=Sun, 1=Mon, ... */) {
  var cd = curr.getDate() - curr.getDay();
  var from = new Date(curr.setDate(cd + firstDay));
  var to = new Date(curr.setDate(cd + 6 + firstDay));

  return {
    from,
    to,
  };
};

TypeScript

export enum WEEK_DAYS {
  Sunday = 0,
  Monday = 1,
  Tuesday = 2,
  Wednesday = 3,
  Thursday = 4,
  Friday = 5,
  Saturday = 6,
}

export const getWeekDays = (
  curr: Date,
  firstDay: WEEK_DAYS = WEEK_DAYS.Monday
): { from: Date; to: Date } => {
  const cd = curr.getDate() - curr.getDay();
  const from = new Date(curr.setDate(cd + firstDay));
  const to = new Date(curr.setDate(cd + 6 + firstDay));

  return {
    from,
    to,
  };
};
Teahan answered 9/12, 2019 at 14:57 Comment(0)
S
1

function getMonday(d) {
    d = new Date(d);
    var day = d.getDay(),
        diff = d.getDate() - day + (day == 0 ? -6:1); // adjust when day is sunday
    return new Date(d.setDate(diff));
  }
  
 console.log( getMonday(new Date(new Date().getFullYear(), new Date().getMonth(), new Date().getDate())) )  // Mon Nov 08 2010
Stole answered 1/10, 2020 at 11:52 Comment(0)
O
1

Pure vanilla JS. no third party libraries.

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)

^ this returns Sunday 00am to Sunday 00am. Adjust the "7" to get what you want.

Overcast answered 22/6, 2021 at 13:52 Comment(0)
M
1
var currentDate = new Date();
var firstday = new Date(currentDate.setDate(currentDate.getDate() - currentDate.getDay())).toUTCString();
var lastday = new Date(currentDate.setDate(currentDate.getDate() - currentDate.getDay() + 6)).toUTCString();
console.log("firstday", firstday);
console.log("lastday", lastday);
Mariomariology answered 1/9, 2021 at 16:36 Comment(1)
Please edit your answer to provide more information as to how it works. Code-only answers might solve the problem of the original asker but they don't help future readers understand the solution.Koon
L
1

Works with different months and years.

let wDate = new Date();
let dDay = wDate.getDay() > 0 ? wDate.getDay() : 7;
let first = wDate.getDate() - dDay + 1;
let firstDayWeek = new Date(wDate.setDate(first));
let lastDayWeek = new Date(wDate.setDate(firstDayWeek.getDate()+6));
console.log(firstDayWeek.toLocaleDateString());
console.log(lastDayWeek.toLocaleDateString());
Lallans answered 6/2, 2022 at 21:20 Comment(0)
A
0

Nice suggestion but you got a small problem in lastday. You should change it to:

lastday = new Date(firstday.getTime() + 60 * 60 *24 * 6 * 1000);
Assort answered 27/5, 2015 at 8:17 Comment(1)
Not all days are 24 hrs long where daylight saving is observed.Unsnap
D
0

The moment approach worked for me for all the cases ( although i have not test the boundaries like year end , leap years ). Only Correction in the above code is the parameter is "isoWeek" , if you want to start the week from Monday.

    let startOfWeek = moment().startOf("isoWeek").toDate();
    let endOfWeek = moment().endOf("isoWeek").toDate();
Duplicature answered 4/6, 2017 at 23:22 Comment(0)
L
0

We have added jquery code that shows the current week of days from monday to sunday.

var d = new Date();
var week = [];
var _days = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];
var _months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
for (let i = 1; i <= 7; i++) {
    let first = d.getDate() - d.getDay() + i; 
    let dt = new Date(d.setDate(first));
    var _day = _days[dt.getDay()];
     var _month = _months[dt.getMonth()];
     var _date = dt.getDate();
     if(_date < 10 ){
         _date = '0' +_date;
     }
     var _year = dt.getFullYear();
     var fulldate = _day+' '+_month+' '+_date+' '+_year+' ';
     week.push(fulldate);
  }
console.log(week);
Lineation answered 4/3, 2020 at 7:44 Comment(2)
This code store the week days in an array named as week. The format of date that is stored in array is Day Mon Date Year means it shows the first day of the week, then month, date and year.Lineation
How is this "jQuery code"? There are numerous simpler answers using the same technique.Unsnap
U
0

An old question with lots of answers, so another one won't be an issue. Some general functions to get the start and end of all sorts of time units.

For startOf and endOf week, the start day of the week defaults to Sunday (0) but any day can be passed (Monday - 1, Tuesday - 2, etc.). Only uses Gregorian calendar though.

The functions don't mutate the source date, so to see if a date is in the same week as some other date (week starting on Monday):

if (d >= startOf('week', d1, 1) && d <= endOf('week', d1, 1)) {
  // d is in same week as d1
}

or in the current week starting on Sunday:

if (d >= startOf('week') && d <= endOf('week')) {
  // d is in the current week
}

// Returns a new Date object set to start of given unit
// For start of week, accepts any day as start
function startOf(unit, date = new Date(), weekStartDay = 0) {
  // Copy original so don't modify it
  let d = new Date(date);
  let e = new Date(d);
  e.setHours(23,59,59,999);
  // Define methods
  let start = {
    second: d => d.setMilliseconds(0),
    minute: d => d.setSeconds(0,0),
    hour  : d => d.setMinutes(0,0,0),
    day   : d => d.setHours(0,0,0,0),
    week  : d => {
      start.day(d);
      d.setDate(d.getDate() - d.getDay() + weekStartDay);
      if (d > e) d.setDate(d.getDate() - 7);
    },
    month : d => {
      start.day(d);
      d.setDate(1);
    },
    year  : d => {
      start.day(d);
      d.setMonth(0, 1);
    },
    decade: d => {
      start.year(d);
      let year = d.getFullYear();
      d.setFullYear(year - year % 10);
    },
    century: d => {
      start.year(d);
      let year = d.getFullYear();
      d.setFullYear(year - year % 100);
    },
    millenium: d => {
      start.year(d);
      let year = d.getFullYear();
      d.setFullYear(year - year % 1000);
    }
  }
  start[unit](d);
  return d;
}

// Returns a new Date object set to end of given unit
// For end of week, accepts any day as start day
// Requires startOf
function endOf(unit, date = new Date(), weekStartDay = 0) {
  // Copy original so don't modify it
  let d = new Date(date);
  let e = new Date(date);
  e.setHours(23,59,59,999);
  // Define methods
  let end = {
    second: d => d.setMilliseconds(999),
    minute: d => d.setSeconds(59,999),
    hour  : d => d.setMinutes(59,59,999),
    day   : d => d.setHours(23,59,59,999),
    week  : w => {
      w = startOf('week', w, weekStartDay);
      w.setDate(w.getDate() + 6);
      end.day(w);
      d = w;
    },
    month : d => {
      d.setMonth(d.getMonth() + 1, 0);
      end.day(d);
    },  
    year  : d => {
      d.setMonth(11, 31);
      end.day(d);
    },
    decade: d => {
      end.year(d);
      let y = d.getFullYear();
      d.setFullYear(y - y % 10 + 9);
    },
    century: d => {
      end.year(d);
      let y = d.getFullYear();
      d.setFullYear(y - y % 100 + 99);
    },
    millenium: d => {
      end.year(d);
      let y = d.getFullYear();
      d.setFullYear(y - y % 1000 + 999);
    }
  }
  end[unit](d);
  return d;
}

// Examples
let d = new Date();

['second','minute','hour','day','week','month','year',
 'decade','century','millenium'].forEach(unit => {
   console.log(('Start of ' + unit).padEnd(18)  + ': ' +
   startOf(unit, d).toString());
   console.log(('End of ' + unit).padEnd(18)  + ': ' +
   endOf(unit, d).toString());
});
Unsnap answered 21/4, 2020 at 0:18 Comment(0)
P
0

var currentDate = new Date();
var firstday = new Date(currentDate.setDate(currentDate.getDate() - currentDate.getDay())).toUTCString();
var lastday = new Date(currentDate.setDate(currentDate.getDate() - currentDate.getDay() + 7)).toUTCString();
console.log(firstday, lastday)

I'm using the following code in but because of .toUTCString() i'm receiving the following error as show in image.

if i remove .toUTCString(). output which i receive is not as expected

Principal answered 7/12, 2020 at 8:34 Comment(0)
P
0

Small change to @SHIVA's answer which is a changed @Chris Lang answer. For monday first usage with fix when today is sunday.

Date.prototype.GetFirstDayOfWeek = function() {
    return (new Date(this.setDate(this.getDate() - this.getDay()+ (this.getDay() == 0 ? -6:1) )));
}
Date.prototype.GetLastDayOfWeek = function() {
    return new Date(this.setDate(this.getDate() - (this.getDay() == 0 ? 7 : this.getDay()) + 7));
}

var today = new Date();

alert(today.GetFirstDayOfWeek());

alert(today.GetLastDayOfWeek());
Physostomous answered 25/3, 2021 at 14:3 Comment(0)
F
0

You can try the below one too

let weekBgnDt = new Date();
let weekEndDt = new Date();
let wBeginDateLng, wEndDateLng, diffDays,dateCols=[];

if (weekBgnDt.getDay() > 0) {
    diffDays = 0 - weekBgnDt.getDay();
    weekBgnDt.setDate(weekBgnDt.getDate() + diffDays)
}
weekEndDt = weekEndDt.setDate(weekBgnDt.getDate() + 6)

wBeginDate = new Intl.DateTimeFormat('en-GB', { day: 'numeric', year: 'numeric', 
month: '2-digit' }).format(weekBgnDt);
wEndDate = new Intl.DateTimeFormat('en-GB', { day: 'numeric', year: 'numeric', month: 
'2-digit' }).format(weekEndDt);

wBeginDateLng = new Intl.DateTimeFormat('en-GB', { day: 'numeric', year: 'numeric', 
month: 'long' }).format(weekBgnDt);
wEndDateLng = new Intl.DateTimeFormat('en-GB', { day: 'numeric', year: 'numeric', 
month: 'long' }).format(weekEndDt);

console.log(wBeginDate, "-", wBeginDateLng)
console.log(wEndDate, "-", wEndDateLng)

for(let i=weekBgnDt;i<=weekEndDt;){
  dateCols.push(new Intl.DateTimeFormat('en-GB', { day: 'numeric', year: 'numeric', 
  month: '2-digit' }).format(i));
  i=weekBgnDt.setDate(weekBgnDt.getDate()+1)
}


console.log({wBeginDate,wBeginDateLng,wEndDate,wEndDateLng,dateCols})

The result will be printed as

{ wBeginDate: "16/05/2021", wBeginDateLng: "16 May 2021", wEndDate: "22/05/2021", wEndDateLng: "22 May 2021", dateCols: Array ["16/05/2021", "17/05/2021", "18/05/2021", "19/05/2021", "20/05/2021", "21/05/2021", "22/05/2021"] }

Feudalize answered 17/5, 2021 at 2:19 Comment(0)
L
0

The right way to get the first and last date of the current week with appropriate month & year is as below

const curr = new Date();
const first = curr.getDate() - curr.getDay() + 1; // Start from Monday
const firstDate = new Date(curr.setDate(first));
const lastDate = new Date(curr.setDate(firstDate.getDate() + 6));

console.log(firstDate.toLocaleDateString(), lastDate.toLocaleDateString());
Levison answered 1/12, 2021 at 13:26 Comment(1)
This code is wrong. If you run it on Sunday, it will show you the dates for the next week.Deibel
F
0

You can use this function, it works with first and last day of the week in different months or years

const getFirstAndLastDayOfTheWeek = () => {
  // The starting time is the same current
  let a = new Date();
  let b = new Date();
  const weekDay = a.getDay();

  if (weekDay === 0) {
    a.setDate(a.getDate() - 6);
  } else if (weekDay === 1) {
    b.setDate(b.getDate() + 7 - b.getDay());
  } else if (weekDay >= 1) {
    a.setDate(a.getDate() - a.getDay() + 1);
    b.setDate(b.getDate() + 7 - b.getDay());
  }

  return { firstWeekDate: a, lastWeekDate: b };
}

console.log(getFirstAndLastDayOfTheWeek());
Fleam answered 30/12, 2021 at 21:9 Comment(0)
I
0

const date = new Date();
var sub = date.getDay() > 0 ? 1 : -6;
var monday = new Date(date.setDate(date.getDate() - date.getDay() + sub));

console.log(monday.toString());
Infighting answered 11/3, 2022 at 11:18 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.