hamdi islam
hamdi islam

Reputation: 1521

get previous saturday's date and next friday's

I want to get the previous saturday's date based on today's date, so if we are on tuesday, the date wanted would be 3 days ago. Also, if today is saturday then this will be counted as the previous saturday.

for example:

today = Tuesday 09, July 2019
previous saturday => Saturday, 06 July 2019
next friday => Friday, 12 July

And if today is Saturday then :

today = Saturday, 13 July 2019
previous saturday = Saturday, 13 July 2019
next friday = Friday, 20 July 2019

following Niet's answer here's my code but i'm still getting the wrong dates:

var dateObj = new Date() // friday July 19
dateObj.setDate(dateObj.getDate() - (6-dateObj.getDay())) // gives me thursday, 18 July
dateObj.setDate(dateObj.getDate() + 6) // gives me wednesday, 24 July

Upvotes: 1

Views: 866

Answers (1)

Niet the Dark Absol
Niet the Dark Absol

Reputation: 324600

You have the convenience that when you call getDay() on a Date object, Saturday is the last entry in the list at 6 (Sunday is 0). This means that the number of days you need to go backwards to get the "most recent" Saturday is just 6-dateObj.getDay()

Take this and combine it with the fact that JS will "auto-correct" dates such that the "negative 1st of July" is the 29th of June, and you can just call

dateObj.setDate(dateObj.getDate() - (6-dateObj.getDay()))

Now dateObj is the most recent Saturday, as desired.

The following Friday can then be obtained similarly:

dateObj.setDate(dateObj.getDate() + 6)

dateObj is now the Friday after the most recent Saturday.


I got the numbers wrong. It's:

dateObj.setDate(dateObj.getDate() - (dateObj.getDay()+1)%7);

As a more general case, you could actually just map dateObj.getDay() to a number of days to go back. The math in the previous code block is equivalent to:

const map = [1, 2, 3, 4, 5, 6, 0];
dateObj.setDate(dateObj.getDate() - map[dateObj.getDay()]);

Upvotes: 5

Related Questions