cómo determinar si la fecha es fin de semana en javascript [cerrado]

81

Si tengo una cita en una función, ¿cómo puedo saber si es un día de fin de semana?

leora
fuente
Tenga en cuenta que algunos países tienen viernes y sábado como fin de semana (como mencioné en las respuestas), por lo que una respuesta debe considerar el fin de semana por país en.wikipedia.org/wiki/Workweek_and_weekend
Guy

Respuestas:

164
var day = yourDateObject.getDay();
var isWeekend = (day === 6) || (day === 0);    // 6 = Saturday, 0 = Sunday
LukeH
fuente
9
d! = day:) Prefiero llamarlo dayOfWeek, tendría más sentido para OP.
BalusC
4
Esto no es cierto para todas las zonas horarias. Por ejemplo, en Francia, el primer día de la semana será el lunes, no el domingo. Las bibliotecas modernas como Moment compensan esto.
csvan
7
@csvan: getDaysiempre debe devolver 0 para el domingo y 6 para el sábado, etc., según la configuración actual de la zona horaria. (Y luego depende del OP decidir qué constituye un "fin de semana" de acuerdo con sus requisitos).
LukeH
1
Para js, probablemente sea mejor si lo hace en ===lugar de ==comparar valores absolutos. No es crucial, sino solo la mejor práctica.
dylanh724
1
Consulte ecma-international.org/ecma-262/6.0/#sec-week-day . 0 siempre es igual a Domingo
TreeAndLeaf
49
var isWeekend = yourDateObject.getDay()%6==0;
Kennebec
fuente
Esto dice devuelve verdadero si es sábado
Gianfranco P.
13
0% 6 (domingo) y 6% 6 (sábado) ambos tienen un módulo 0
kennebec
8
excepto ser voluntariamente confuso, no veo ningún sentido en esta técnica. Personalmente prefiero la respuesta de LukeH. Es solo por casualidad que en este caso podamos usar módulo de 6 en lugar de 7 para resolver nuestro problema.
Henri Lapierre
Algunos países tienen viernes y sábado como fin de semana
Guy
@Guy, entonces la pregunta es si .getDay()dará como resultado otro valor o si la definición de isWeekendsería incorrecta. Si se trata de la variable, no me importa. Supongo que un 0 siempre será domingo, así que está bien para mí.
C4d
10

Corto y dulce.

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

user1949536
fuente
5

Probé la respuesta correcta y funcionó para ciertas configuraciones regionales pero no para todas:

En momentjs Docs: weekday El número devuelto depende de la configuración regional initialWeekDay, así que Monday = 0 | Domingo = 6

Entonces cambio la lógica para verificar el DayString real ('Domingo')

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

De esta forma, eres independiente de la configuración regional.

T04435
fuente
Algunos países tienen viernes y sábado como fin de semana
Guy
@Guy Debe adaptar el código para satisfacer las necesidades del país. Según la wiki que enlaza arriba, algunos otros países tienen un fin de semana de un solo día. 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

Actualización 2020

Ahora hay varias formas de lograrlo.

1) Usando el daymétodo para obtener los días de 0 a 6:

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

2) Usando el isoWeekdaymétodo para obtener los días del 1 al 7:

const day = yourDateObject.isoWeekday();
// or const day = yourDateObject.get('isoWeekday');
const isWeekend = (day === 6 || day === 7);    // 6 = Saturday, 7 = Sunday
Orlandster
fuente
.isoWeekday()es un método moment.js, pero no especificado.
NVRM
0
var d = new Date();
var n = d.getDay();
 if( n == 6 )
console.log("Its weekend!!");
else
console.log("Its not weekend");
Praveen
fuente
0

He probado la mayoría de las respuestas aquí y siempre hay algún problema con la zona horaria, la configuración regional o cuando el comienzo de la semana es domingo o lunes.

A continuación es una que me parece es más seguro, ya que se basa en el nombre del día de la semana y en la en la configuración regional.

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;
felipe
fuente
0

En la versión actual, debe usar

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

Utilice el método .getDay () en el objeto Date para obtener el día.

Compruebe si es 6 (sábado) o 0 (domingo)

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
fuente
Bienvenido a SO. Tenga más cuidado al formatear sus respuestas. El texto normal no debe ir en bloques de código.
Calculuswhiz
-1

Lo siguiente genera un booleano si un objeto de fecha es durante el horario de « apertura », excluyendo los días de fin de semana y excluyendo las horas nocturnas entre 23H00y 9H00, teniendo en cuenta el desplazamiento de zona horaria del cliente.

Por supuesto, esto no maneja casos especiales como vacaciones, pero no muy lejos;)

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?

Alternativamente, para obtener el día de la semana como una cadena humana local , podemos usar:

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

Tenga cuidado con los new Intl.DateTimeFormatbucles internos lentos, una matriz asociativa simple se ejecuta mucho más rápido:

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

NVRM
fuente
-3

Simplemente agregue 1 antes del módulo

var isWeekend = (yourDateObject.getDay() + 1) % 7 == 0;
Muhammad Usama
fuente
5
Esto solo funciona si considera que el domingo es todo el fin de semana.
Todos los trabajadores son esenciales
@cpburnz la mayoría de los países lo hacen. solo unos pocos comienzan la semana con el domingo.
bokkie
2
@bokkie Entonces, esa es una información vital que debe agregarse a su respuesta.
Todos los trabajadores son esenciales