wie man feststellt, ob das Datum ein Wochenende in Javascript ist [geschlossen]

80

Wenn ich ein Datum habe, das in eine Funktion kommt, wie kann ich dann feststellen, ob es ein Wochenendtag ist?

Leora
quelle
Beachten Sie, dass einige Länder Freitag und Samstag als Wochenende haben (wie ich in den Antworten erwähnt habe), daher sollte eine Antwort das Wochenende nach Ländern berücksichtigen. En.wikipedia.org/wiki/Workweek_and_weekend
Guy

Antworten:

163
var day = yourDateObject.getDay();
var isWeekend = (day === 6) || (day === 0);    // 6 = Saturday, 0 = Sunday
LukeH
quelle
9
d! = day:) Ich würde es lieber nennen dayOfWeek, es wäre sinnvoller für OP.
BalusC
4
Dies gilt nicht für alle Zeitzonen. In Frankreich ist der erste Tag der Woche beispielsweise Montag und nicht Sonntag. Moderne Zeitbibliotheken wie Moment kompensieren dies.
CSvan
7
@csvan: getDaysollte immer 0 für Sonntag und 6 für Samstag usw. zurückgeben, entsprechend den aktuellen Zeitzoneneinstellungen. (Und dann ist es an der OP zu entscheiden, was ein "Wochenende" gemäß ihren Anforderungen
ausmacht
1
Für js ist es wahrscheinlich besser, wenn Sie dies tun, ===anstatt ==absolute Werte zu vergleichen. Nicht entscheidend, sondern nur Best Practice.
Dylanh724
1
Siehe ecma-international.org/ecma-262/6.0/#sec-week-day . 0 ist immer gleich Sonntag
TreeAndLeaf
48
var isWeekend = yourDateObject.getDay()%6==0;
kennebec
quelle
Dies sagt, kehrt wahr zurück, wenn es Samstag ist
Gianfranco P.
13
0% 6 (Sonntag) und 6% 6 (Samstag) haben beide einen 0-Modul
kennebec
8
Abgesehen davon, dass ich freiwillig verwirrt bin, sehe ich keinen Sinn in dieser Technik. Ich persönlich bevorzuge die Antwort von LukeH. Es ist nur ein Zufall, dass wir in diesem Fall Modulo von 6 anstelle von 7 verwenden können, um unser Problem zu lösen.
Henri Lapierre
Einige Länder haben Freitag und Samstag als Wochenende
Guy
@Guy dann ist die Frage, ob .getDay()sich ein anderer Wert ergibt oder ob die Definition von isWeekendfalsch wäre. Wenn es um die Variable geht, ist mir das egal. Ich denke, eine 0 wird immer Sonntag sein, also ist es gut für mich.
C4d
10

Kurz und bündig.

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

user1949536
quelle
5

Ich habe die richtige Antwort ausprobiert und sie hat für bestimmte Ländereinstellungen funktioniert, aber nicht für alle:

In momentjs Docs: Wochentag Die zurückgegebene Nummer hängt vom Gebietsschema initialWeekDay ab, also Montag = 0 | Sonntag = 6

Also ändere ich die Logik, um nach dem tatsächlichen DayString ('Sonntag') zu suchen.

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

Auf diese Weise sind Sie unabhängig vom Gebietsschema.

T04435
quelle
Einige Länder haben Freitag und Samstag als Wochenende
Guy
@Guy Sie müssen den Code an die Bedürfnisse des Landes anpassen. Gemäß dem Wiki, das Sie oben verlinken, haben einige andere Länder ein Wochenende mit einem einzigen Tag. 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

Update 2020

Es gibt jetzt mehrere Möglichkeiten, dies zu erreichen.

1) Verwenden Sie die dayMethode, um die Tage von 0-6 zu erhalten:

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

2) Verwenden Sie die isoWeekdayMethode, um die Tage von 1-7 zu erhalten:

const day = yourDateObject.isoWeekday();
// or const day = yourDateObject.get('isoWeekday');
const isWeekend = (day === 6 || day === 7);    // 6 = Saturday, 7 = Sunday
Orlandster
quelle
.isoWeekday()ist eine moment.js-Methode, aber nicht angegeben.
NVRM
0
var d = new Date();
var n = d.getDay();
 if( n == 6 )
console.log("Its weekend!!");
else
console.log("Its not weekend");
Praveen
quelle
0

Ich habe die meisten Antworten hier getestet und es gibt immer Probleme mit der Zeitzone, dem Gebietsschema oder wenn der Wochenbeginn entweder Sonntag oder Montag ist.

Im Folgenden finden Sie eine , die ich finde , ist sicherer, da es auf dem beruht Namen des Wochentages und auf dem en locale.

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;
felippe
quelle
0

In der aktuellen Version sollten Sie verwenden

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

Verwenden Sie die Methode .getDay () für das Date-Objekt, um den Tag abzurufen.

Überprüfen Sie, ob es 6 (Samstag) oder 0 (Sonntag) ist.

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);
Tanzeem Bhatti
quelle
Willkommen bei SO. Bitte seien Sie beim Formatieren Ihrer Antworten vorsichtiger. Normaler Text sollte nicht in Codeblöcke eingefügt werden.
Calculuswhiz
-1

Im Folgenden wird ein Boolescher Wert ausgegeben, der angibt, ob sich ein Datumsobjekt während der Öffnungszeiten (ohne Wochenendtage) und ohne Nachtstunden zwischen 23H00und befindet 9H00, wobei der Zeitzonenversatz des Clients berücksichtigt wird.

Natürlich behandelt dies keine Sonderfälle wie Feiertage, aber nicht weit zu;)

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?

Alternativ können wir Folgendes verwenden , um den Wochentag als Gebietsschema für die menschliche Zeichenfolge abzurufen:

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

Vorsicht, new Intl.DateTimeFormatin Schleifen ist es langsam, ein einfaches assoziatives Array läuft viel schneller:

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

NVRM
quelle
-3

Fügen Sie einfach 1 vor Modulo hinzu

var isWeekend = (yourDateObject.getDay() + 1) % 7 == 0;
Muhammad Usama
quelle
5
Dies funktioniert nur, wenn Sie den Sonntag als das ganze Wochenende betrachten.
Alle Arbeiter sind essentiell
@cpburnz die meisten Länder tun. Nur wenige beginnen die Woche mit Sonntag.
Bokkie
2
@bokkie Dann ist das eine wichtige Information, die zu Ihrer Antwort hinzugefügt werden sollte.
Alle Arbeiter sind essentiell