자바 스크립트에서 날짜가 주말인지 확인하는 방법


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을 반환해야합니다. (그리고 그들의 요구 사항에 따라 "주말"을 구성하는 것을 결정하는 것은 OP에 달려 있습니다.)
LukeH

1
js =====경우 절대 값을 비교할 때 대신 수행 하는 것이 더 좋습니다 . 중요하지는 않지만 모범 사례입니다.
dylanh724


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

토요일이면 true를 반환합니다
Gianfranco P.

13
0 % 6 (일요일) 및 6 % 6 (토요일) 모두 0 모듈러스를
가짐

8
자발적인 혼란을 제외하고는이 기술에서 어떤 점도 볼 수 없습니다. 개인적으로 LukeH의 대답을 선호합니다. 이 경우 문제를 해결하기 위해 7 대신 6 모듈로를 사용할 수있는 것은 우연한 일입니다.
Henri Lapierre 2014 년

일부 국가는 금요일과 토요일을 주말로합니다
Guy

@Guy 그렇다면 질문은 .getDay()다른 값을 가져올 지 또는 정의 isWeekend가 잘못되었는지입니다. 변수에 관한 것이라면 상관하지 않습니다. 0은 항상 일요일이 될 것 같아서 괜찮습니다.
C4d

10

짧고 달다.

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


5

나는 정답을 시도했고 특정 로케일에서는 작동했지만 모두는 아닙니다.

momentjs 문서에서 : weekday 반환되는 숫자는 로케일 initialWeekDay에 따라 다르므로 Monday = 0 | 일요일 = 6

그래서 실제 DayString ( 'Sunday')을 확인하기 위해 논리를 변경합니다.

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

이렇게하면 로케일에 독립적입니다.


일부 국가는 금요일과 토요일을 주말로합니다
Guy

@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

현재 버전에서는 다음을 사용해야합니다.

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

0

Date 객체에서 .getDay () 메서드를 사용하여 요일을 가져옵니다.

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

다음 은 클라이언트 시간대 오프셋을 고려하면서 날짜 개체가 주말을 제외하고 와 사이의 야간 시간을 제외하고 « 영업 »시간 동안인지 여부를 부울 출력합니다 .23H009H00

물론 이것은 휴일과 같은 특별한 경우를 처리하지 않지만 멀지 않습니다.)

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?

또는 요일을 로케일 휴먼 문자열 로 가져 오려면 다음 을 사용할 수 있습니다.

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
이것은 일요일을 전체 주말로 간주하는 경우에만 작동합니다.
모든 노동자는 필수적이다

대부분의 국가에서 @cpburnz입니다. 일요일로 주를 시작하는 사람은 몇 명뿐입니다.
bokkie

2
@bokkie 그렇다면 답변에 추가해야 할 중요한 정보입니다.
모든 노동자는 필수적이다
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.