Jeśli mam datę, która wchodzi w funkcję, jak mogę sprawdzić, czy jest to dzień weekendowy?
javascript
date
leora
źródło
źródło
Odpowiedzi:
var day = yourDateObject.getDay(); var isWeekend = (day === 6) || (day === 0); // 6 = Saturday, 0 = Sunday
źródło
d
! =day
:) Wolałbym to nazwaćdayOfWeek
, miałoby to większy sens w OP.getDay
powinien 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).===
zamiast==
porównywać wartości bezwzględne. Nie jest to kluczowe, ale po prostu najlepsza praktyka.var isWeekend = yourDateObject.getDay()%6==0;
źródło
.getDay()
spowoduje to inną wartość, czy też definicjaisWeekend
był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.Krótkie i słodkie.
var isWeekend = ([0,6].indexOf(new Date().getDay()) != -1);
źródło
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.
źródło
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).
Zaktualizuj 2020
Obecnie można to osiągnąć na wiele sposobów.
1) Korzystając z
day
metody, 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
isoWeekday
metody, 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
źródło
.isoWeekday()
jest metodą momentu.js, ale nie została określona.var d = new Date(); var n = d.getDay(); if( n == 6 ) console.log("Its weekend!!"); else console.log("Its not weekend");
źródło
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;
źródło
W aktualnej wersji powinieneś użyć
var day = yourDateObject.day(); var isWeekend = (day === 6) || (day === 0); // 6 = Saturday, 0 = Sunday
źródło
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);
źródło
Poniższy komunikat generuje wartość logiczną, czy obiekt daty jest w godzinach « otwarcia », z wyłączeniem dni weekendowych i godzin nocnych między
23H00
i9H00
, 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.DateTimeFormat
jest 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()] )
źródło
Po prostu dodaj 1 przed modulo
var isWeekend = (yourDateObject.getDay() + 1) % 7 == 0;
źródło