jak ustalić, czy data jest weekendem w javascript [zamknięte]


81

Jeśli mam datę, która wchodzi w funkcję, jak mogę sprawdzić, czy jest to dzień weekendowy?


Zwróć uwagę, że w niektórych krajach piątek i sobota są weekendami (jak wspomniałem w odpowiedziach), więc odpowiedź powinna uwzględniać weekend według kraju en.wikipedia.org/wiki/Workweek_and_weekend
Guy

Odpowiedzi:


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

9
d! = day:) Wolałbym to nazwać dayOfWeek, miałoby to większy sens w OP.
BalusC

4
Nie dotyczy to wszystkich stref czasowych. Na przykład we Francji pierwszym dniem tygodnia będzie poniedziałek, a nie niedziela. Współczesne biblioteki, takie jak Moment, rekompensują to.
csvan

7
@csvan: getDaypowinien zawsze zwracać 0 dla niedzieli i 6 dla soboty itp., zgodnie z bieżącymi ustawieniami strefy czasowej. (A potem to OP decyduje, co stanowi „weekend” zgodnie z ich wymaganiami).
LukeH,

1
W przypadku js prawdopodobnie lepiej będzie, jeśli to zrobisz, ===zamiast ==porównywać wartości bezwzględne. Nie jest to kluczowe, ale po prostu najlepsza praktyka.
dylanh724

1
Zobacz ecma-international.org/ecma-262/6.0/#sec-week-day . 0 zawsze oznacza niedzielę
TreeAndLeaf

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

To mówi, że zwraca prawdę, jeśli jest sobota
Gianfranco P.

13
0% 6 (niedziela) i 6% 6 (sobota) oba mają moduł 0
kennebec

8
poza tym, że jestem świadomym wprowadzaniem w błąd, nie widzę sensu w tej technice. Osobiście wolę odpowiedź LukeH'a. To tylko przypadek, że w tym przypadku możemy użyć modulo 6 zamiast 7, aby rozwiązać nasz problem.
Henri Lapierre,

W niektórych krajach piątek i sobota są weekendami
Guy

@Guy to pytanie brzmi, czy .getDay()spowoduje to inną wartość, czy też definicja isWeekendbyłaby błędna. Jeśli chodzi o zmienną, nie obchodzi mnie. Myślę, że 0 zawsze będzie w niedzielę, więc dla mnie jest w porządku.
C4d

10

Krótkie i słodkie.

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


5

Wypróbowałem poprawną odpowiedź i zadziałało to w niektórych lokalizacjach, ale nie we wszystkich:

In momentjs Docs: weekday Zwrócona liczba zależy od ustawień regionalnych initialWeekDay, więc poniedziałek = 0 | Niedziela = 6

Więc zmieniam logikę, aby sprawdzić rzeczywisty ciąg dnia („niedziela”)

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

W ten sposób jesteś niezależny od lokalizacji.


W niektórych krajach piątek i sobota są weekendami
Guy

@Guy Musisz dostosować kod do potrzeb kraju. Zgodnie z wiki, którą łączysz powyżej, niektóre inne kraje mają jeden dzień weekendu. 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

Zaktualizuj 2020

Obecnie można to osiągnąć na wiele sposobów.

1) Korzystając z daymetody, aby uzyskać dni od 0 do 6:

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

2) Korzystając z isoWeekdaymetody, aby uzyskać dni od 1-7:

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

.isoWeekday()jest metodą momentu.js, ale nie została określona.
NVRM,

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

0

Przetestowałem większość odpowiedzi tutaj i zawsze występuje problem ze strefą czasową, lokalizacją lub początkiem tygodnia w niedzielę lub poniedziałek.

Poniżej znajduje się ten, który moim zdaniem jest bezpieczniejszy, ponieważ opiera się na nazwie dnia tygodnia i lokalizacji 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

W aktualnej wersji powinieneś użyć

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

0

Użyj metody .getDay () na obiekcie Date, aby pobrać dzień.

Sprawdź, czy jest 6 (sobota) czy 0 (niedziela)

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

Witamy w SO. Zachowaj ostrożność podczas formatowania odpowiedzi. Zwykły tekst nie powinien być umieszczany w blokach kodu.
Calculuswhiz,

-1

Poniższy komunikat generuje wartość logiczną, czy obiekt daty jest w godzinach « otwarcia », z wyłączeniem dni weekendowych i godzin nocnych między 23H00i 9H00, biorąc pod uwagę przesunięcie strefy czasowej klienta.

Oczywiście nie dotyczy to wyjątkowych przypadków, takich jak święta, ale niedaleko;)

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?

Alternatywnie, aby pobrać dzień tygodnia jako locale Łańcuch ludzki , możemy użyć:

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

Uwaga new Intl.DateTimeFormatjest powolna w pętlach, prosta tablica asocjacyjna działa znacznie szybciej:

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


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.