Как определить, если дата в выходные дни в JavaScript
Если у меня есть дата, входящая в функцию, как я могу узнать, выходной ли это день?
12 ответов
var day = yourDateObject.getDay();
var isWeekend = (day === 6) || (day === 0); // 6 = Saturday, 0 = Sunday
Коротко и сладко.
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;