Jeśli mam datę, która wchodzi w funkcję, jak mogę sprawdzić, czy jest to dzień weekendowy?
Jeśli mam datę, która wchodzi w funkcję, jak mogę sprawdzić, czy jest to dzień weekendowy?
Odpowiedzi:
var day = yourDateObject.getDay();
var isWeekend = (day === 6) || (day === 0); // 6 = Saturday, 0 = Sunday
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;
.getDay()
spowoduje to inną wartość, czy też definicja isWeekend
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);
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.
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
.isoWeekday()
jest metodą momentu.js, ale nie została określona.
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;
W aktualnej wersji powinieneś użyć
var day = yourDateObject.day();
var isWeekend = (day === 6) || (day === 0); // 6 = Saturday, 0 = Sunday
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);
Poniższy komunikat generuje wartość logiczną, czy obiekt daty jest w godzinach « otwarcia », z wyłączeniem dni weekendowych i godzin nocnych między 23H00
i 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.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()]
)
Po prostu dodaj 1 przed modulo
var isWeekend = (yourDateObject.getDay() + 1) % 7 == 0;