If I have a date coming into a function, how can I tell if it's a weekend day?
var dayOfWeek = yourDateObject.getDay();
var isWeekend = (dayOfWeek === 6) || (dayOfWeek === 0); // 6 = Saturday, 0 = Sunday
d
!= day
:) I would rather call it dayOfWeek
, it would make more sense to OP. –
Sachi getDay
should always return 0 for sunday and 6 for saturday etc, according to the current timezone settings. (And then it's up to the OP to decide what constitutes a "weekend" according to their requirements.) –
Hogle ===
instead of ==
when comparing absolute values. Not crucial, but just best practice. –
Knossos var isWeekend = yourDateObject.getDay()%6==0;
.getDay()
will result in another value or if the definition of isWeekend
would be wrong. If its about the variable, I dont care. I guess a 0 will always be sunday, so its fine for me. –
Lorrinelorry Short and sweet.
var isWeekend = ([0,6].indexOf(new Date().getDay()) != -1);
[0, 6].includes(new Date().getDay())
–
Gamelan I tried the Correct answer and it worked for certain locales but not for all:
In momentjs Docs: weekday The number returned depends on the locale initialWeekDay, so Monday = 0 | Sunday = 6
So I change the logic to check for the actual DayString('Sunday')
const weekday = momentObject.format('dddd'); // Monday ... Sunday
const isWeekend = weekday === 'Sunday' || weekday === 'Saturday';
This way you are Locale independent.
Some countries have adopted a one-day weekend, i.e. either Sunday only (in seven countries), Friday only (in Djibouti, Iran, Palestine and Somalia), or Saturday only (in Nepal).
–
Neel Update Nov 2023
Since mid-2022, the days of the weekend can be obtained using the weekInfo
method of Intl.Locale
instances.
The method is supported in all modern browsers (under Windows, iOS, and Android including Node.js and Deno, with the exception of Firefox as of Nov 2023).
new Intl.Locale(locale).weekInfo.weekend
will return an array of integers indicating the days of the weekend for the particular locale, where 1 is Monday and 7 is Sunday.
Further information can be found on MDN Intl.Locale.prototype.getWeekInfo().
Examples:
console.log(new Intl.Locale("en-US").weekInfo.weekend);
//[6,7] // weekend is days 6 and 7 (Sat and Sun) in USA
console.log(new Intl.Locale("ar-EG").weekInfo.weekend);
// [5,6] // weekend is days 5 and 6 (Fri and Sat) in Egypt
console.log(new Intl.Locale("en-IN").weekInfo.weekend);
// [7] // weekend is day 7 (Sunday) in India
Unlike the Date.getDay()
method which returns the weekday number with 0
meaning Sunday, the weekInfo.weekend
returns Sunday as day number 7
. Monday is day 1
.
The function below tests, if the weekday number returned from Date.getDay()
(after correction for Sunday) is included in the array of integers returned from the weekInfo.weekend
method.
function isWeekend(date , locale="en-US") {
return new Intl.Locale(locale).weekInfo.weekend.includes(date.getUTCDay()||7);
}
//==== test for 2023-11-24 (Friday) =======
let myDate = new Date("2023-11-24");
console.log(isWeekend(myDate)); // false in USA
console.log(isWeekend(myDate,"ar-EG")); // true in Egypt
console.log(isWeekend(myDate,"en-IN")); // false in India
console.log(isWeekend(myDate,"fa-IR")); // true in Iran
The following table summarises the days of the workweek and weekends as detailed on table of Wikipedia page.
Total Countries | Days of Weekend | Total Working Days |
---|---|---|
95 | Saturday and Sunday | 5 |
18 | Friday and Saturday | 5 |
1 | Friday and Sunday | 5 |
10 | Sunday | 6 |
4 | Friday | 6 |
1 | Saturday | 6 |
Source: Wikipedia (Nov 2023) |
Update 2020
There are now multiple ways to achieve this.
1) Using the day
method to get the days from 0-6:
const day = yourDateObject.day();
// or const day = yourDateObject.get('day');
const isWeekend = (day === 6 || day === 0); // 6 = Saturday, 0 = Sunday
2) Using the isoWeekday
method to get the days from 1-7:
const day = yourDateObject.isoWeekday();
// or const day = yourDateObject.get('isoWeekday');
const isWeekend = (day === 6 || day === 7); // 6 = Saturday, 7 = Sunday
.isoWeekday()
is a moment.js method, but not specified. –
Meraz I've tested most of the answers here and there's always some issue with the Timezone, Locale, or when start of the week is either Sunday or Monday.
Below is one which I find is more secure, since it relies on the name of the weekday and on the en locale.
let startDate = start.clone(),
endDate = end.clone();
let days = 0;
do {
const weekday = startDate.locale('en').format('dddd'); // Monday ... Sunday
if (weekday !== 'Sunday' && weekday !== 'Saturday') days++;
} while (startDate.add(1, 'days').diff(endDate) <= 0);
return days;
In the current version, you should use
var day = yourDateObject.day();
var isWeekend = (day === 6) || (day === 0); // 6 = Saturday, 0 = Sunday
Use .getDay() method on the Date object to get the day.
Check if it is 6 (Saturday) or 0 (Sunday)
var givenDate = new Date('2020-07-11');
var day = givenDate.getDay();
var isWeekend = (day === 6) || (day === 0) ? 'It's weekend': 'It's working day';
console.log(isWeekend);
var d = new Date();
var n = d.getDay();
if( n == 6 )
console.log("Its weekend!!");
else
console.log("Its not weekend");
The following outputs a boolean whether a date object is during «opening» hours, excluding weekend days, and excluding nightly hours between 23H00
and 9H00
, while taking into account the client time zone offset.
Of course this does not handle special cases like holidays, but not far to ;)
let t = new Date(Date.now()) // Example Date object
let zoneshift = t.getTimezoneOffset() / 60
let isopen = ([0,6].indexOf(t.getUTCDay()) === -1) && (23 + zoneshift < t.getUTCHours() === t.getUTCHours() < 9 + zoneshift)
// Are we open?
console.log(isopen)
<b>We are open all days between 9am and 11pm.<br>
Closing the weekend.</b><br><hr>
Are we open now?
Alternatively, to get the day of the week as a locale Human string, we can use:
let t = new Date(Date.now()) // Example Date object
console.log(
new Intl.DateTimeFormat('en-US', { weekday: 'long'}).format(t) ,
new Intl.DateTimeFormat('fr-FR', { weekday: 'long'}).format(t) ,
new Intl.DateTimeFormat('ru-RU', { weekday: 'long'}).format(t)
)
Beware new Intl.DateTimeFormat
is slow inside loops, a simple associative array runs way faster:
console.log(
["Sun","Mon","Tue","Wed","Thu","Fri","Sat"][new Date(Date.now()).getDay()]
)
Simply add 1 before modulo
var isWeekend = (yourDateObject.getDay() + 1) % 7 == 0;
© 2022 - 2024 — McMap. All rights reserved.