как определить дату выходного дня в javascript [закрыто]


81

если у меня есть дата, входящая в функцию, как я могу определить, что это выходной день?


Обратите внимание, что в некоторых странах пятница и суббота являются выходными (как я уже упоминал в ответах), поэтому ответ должен учитывать выходные по стране en.wikipedia.org/wiki/Workweek_and_weekend
Guy

Ответы:


164
var day = yourDateObject.getDay();
var isWeekend = (day === 6) || (day === 0);    // 6 = Saturday, 0 = Sunday

9
d! = day:) Я бы лучше назвал это dayOfWeek, было бы больше смысла OP.
BalusC

4
Это не верно для всех часовых поясов. Например, во Франции первым днем ​​недели будет понедельник, а не воскресенье. Современные библиотеки времени, такие как Moment, компенсируют это.
csvan

7
@csvan: getDayвсегда должен возвращать 0 для воскресенья и 6 для субботы и т. д. в соответствии с текущими настройками часового пояса. (А затем ОП решает, что
считать

1
Для js, вероятно, лучше, если вы это сделаете, ===а не ==при сравнении абсолютных значений. Не критично, но просто передовой опыт.
dylanh724

1
См. Ecma-international.org/ecma-262/6.0/#sec-week-day . 0 всегда равно воскресенью
TreeAndLeaf

49
var isWeekend = yourDateObject.getDay()%6==0;

Это говорит о том, что возвращает истину, если сейчас суббота
Джанфранко П.

13
0% 6 (воскресенье) и 6% 6 (суббота) оба имеют модуль упругости 0
kennebec

8
кроме того, что я произвольно сбиваю с толку, я не вижу никакого смысла в этой технике. Я лично предпочитаю ответ LukeH. Только случайно в этом случае мы можем использовать по модулю 6 вместо 7 для решения нашей задачи.
Анри Лапьер

В некоторых странах пятница и суббота являются выходными
Гай,

@Guy, тогда вопрос в том, .getDay()приведет ли это к другому значению или определение isWeekendбудет неправильным. Если дело в переменной, мне все равно. Я думаю, что 0 всегда будет воскресенье, так что для меня это нормально.
C4d


5

Я попробовал правильный ответ, и он работал для определенных регионов, но не для всех:

В документах momentjs: будний день Возвращаемое число зависит от локали initialWeekDay, поэтому Monday = 0 | Воскресенье = 6

Поэтому я изменяю логику, чтобы проверить фактическое значение DayString ('Sunday')

const weekday = momentObject.format('dddd'); // Monday ... Sunday
const isWeekend = weekday === 'Sunday' || weekday === 'Saturday';

Таким образом, вы не зависят от локали.


В некоторых странах пятница и суббота являются выходными
Гай,

@Guy Вам нужно адаптировать код для нужд страны. Согласно вики, на которую вы ссылаетесь выше, в некоторых других странах один выходной день. 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).
T04435

1

Обновление 2020

Сейчас есть несколько способов добиться этого.

1) Используя dayметод, чтобы получить дни от 0 до 6:

const day = yourDateObject.day();
// or const day = yourDateObject.get('day');
const isWeekend = (day === 6 || day === 0);    // 6 = Saturday, 0 = Sunday

2) Используя isoWeekdayметод, чтобы получить дни с 1 по 7:

const day = yourDateObject.isoWeekday();
// or const day = yourDateObject.get('isoWeekday');
const isWeekend = (day === 6 || day === 7);    // 6 = Saturday, 7 = Sunday

.isoWeekday()это метод moment.js, но не указан.
NVRM

0
var d = new Date();
var n = d.getDay();
 if( n == 6 )
console.log("Its weekend!!");
else
console.log("Its not weekend");

0

Я проверил большинство ответов здесь, и всегда есть проблема с часовым поясом, локалью или тем, когда начало недели - воскресенье или понедельник.

Ниже приведен вариант, который я считаю более безопасным, поскольку он основан на названии дня недели и локали en .

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;


0

Используйте метод .getDay () для объекта Date, чтобы получить день.

Проверьте, 6 (суббота) или 0 (воскресенье)

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);

Добро пожаловать в SO. Пожалуйста, будьте внимательны при форматировании ответов. Обычный текст не должен помещаться в блоки кода.
Calculuswhiz

-1

Следующее выводит логическое значение, находится ли объект даты в часы « открытия », исключая выходные дни и исключая ночные часы между 23H00и 9H00, с учетом смещения часового пояса клиента.

Конечно, это не касается особых случаев, таких как праздники, но не далеко;)

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?

В качестве альтернативы, чтобы получить день недели как строку Human , мы можем использовать:

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)
)

Остерегайтесь new Intl.DateTimeFormatмедленных внутри циклов, простой ассоциативный массив работает намного быстрее:

console.log(
  ["Sun","Mon","Tue","Wed","Thu","Fri","Sat"][new Date(Date.now()).getDay()]
)


-3

Просто добавьте 1 перед модулем

var isWeekend = (yourDateObject.getDay() + 1) % 7 == 0;

5
Это работает, только если вы считаете воскресенье целыми выходными.
All Workers Are Essential

@cpburnz делает это в большинстве стран. лишь некоторые начинают неделю с воскресенья.
bokkie

2
@bokkie Тогда это важная информация, которую следует добавить к вашему ответу.
Все рабочие
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.