если у меня есть дата, входящая в функцию, как я могу определить, что это выходной день?
если у меня есть дата, входящая в функцию, как я могу определить, что это выходной день?
Ответы:
var day = yourDateObject.getDay();
var isWeekend = (day === 6) || (day === 0); // 6 = Saturday, 0 = Sunday
d
! = day
:) Я бы лучше назвал это dayOfWeek
, было бы больше смысла OP.
getDay
всегда должен возвращать 0 для воскресенья и 6 для субботы и т. д. в соответствии с текущими настройками часового пояса. (А затем ОП решает, что
===
а не ==
при сравнении абсолютных значений. Не критично, но просто передовой опыт.
var isWeekend = yourDateObject.getDay()%6==0;
.getDay()
приведет ли это к другому значению или определение isWeekend
будет неправильным. Если дело в переменной, мне все равно. Я думаю, что 0 всегда будет воскресенье, так что для меня это нормально.
Коротко и мило.
var isWeekend = ([0,6].indexOf(new Date().getDay()) != -1);
Я попробовал правильный ответ, и он работал для определенных регионов, но не для всех:
В документах momentjs: будний день Возвращаемое число зависит от локали initialWeekDay, поэтому Monday = 0 | Воскресенье = 6
Поэтому я изменяю логику, чтобы проверить фактическое значение DayString ('Sunday')
const weekday = momentObject.format('dddd'); // Monday ... Sunday
const isWeekend = weekday === 'Sunday' || weekday === 'Saturday';
Таким образом, вы не зависят от локали.
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).
Обновление 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, но не указан.
Я проверил большинство ответов здесь, и всегда есть проблема с часовым поясом, локалью или тем, когда начало недели - воскресенье или понедельник.
Ниже приведен вариант, который я считаю более безопасным, поскольку он основан на названии дня недели и локали 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;
В текущей версии вы должны использовать
var day = yourDateObject.day();
var isWeekend = (day === 6) || (day === 0); // 6 = Saturday, 0 = Sunday
Используйте метод .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);
Следующее выводит логическое значение, находится ли объект даты в часы « открытия », исключая выходные дни и исключая ночные часы между 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;