Как определить, если дата в выходные дни в JavaScript

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

12 ответов

Решение
var day = yourDateObject.getDay();
var isWeekend = (day === 6) || (day === 0);    // 6 = Saturday, 0 = Sunday
var isWeekend = yourDateObject.getDay()%6==0;

Коротко и сладко.

var isWeekend = ([0,6].indexOf(new Date().getDay()) != -1);

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

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

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

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

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

Обновление, ноябрь 2023 г.

С середины 2022 года дни выходных можно узнать с помощьюweekInfoметодIntl.Localeэкземпляры.

Этот метод поддерживается во всех современных браузерах (под Windows, iOS и Android, включая Node.js и Deno, за исключением Firefox по состоянию на ноябрь 2023 г.).

new Intl.Locale(locale).weekInfo.weekendвернет массив целых чисел, указывающих дни выходных для определенного региона, где 1 — понедельник, а 7 — воскресенье.

Дополнительную информацию можно найти на MDN Intl.Locale.prototype.getWeekInfo().

Примеры:

      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

В отличие от метода, который возвращает номер дня недели с помощью0означает воскресенье, возвращает воскресенье как номер дня7. Понедельник - день1.

Функция ниже проверяет, вернулся ли номер дня недели изDate.getDay()(после поправки на воскресенье) включается в массив целых чисел, возвращаемый изweekInfo.weekendметод.

Обновление 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

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

Ниже приведен вариант, который я считаю более безопасным, поскольку он основан на названии дня недели и локали 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;
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 day = yourDateObject.day();
    var isWeekend = (day === 6) || (day === 0);    // 6 = Saturday, 0 = Sunday
var d = new Date();
var n = d.getDay();
 if( n == 6 )
console.log("Its weekend!!");
else
console.log("Its not weekend");

Следующее выводит логическое значение, находится ли объект даты в часы " открытия ", исключая выходные дни и исключая ночные часы между 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()]
)

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

var isWeekend = (yourDateObject.getDay() + 1) % 7 == 0;
Другие вопросы по тегам