Estoy trabajando en una aplicación de alimentos como foodpanda, me enfrento a un problema de que el día de inicio de un restaurante es el lunes y el día de finalización es el viernes, estoy tratando de restringir que los usuarios no ordenen (Horario) sábado y domingo (o cualquier otro día cuando el restaurante estará fuera de servicio).
También tengo valores de día de inicio y día de finalización en mi base de datos.
Puede obtener el día actual con
let x = new Date() x.getDay()Si desea que el día sea una cadena en lugar de un número (0 a 6 en este caso), use
var options = { weekday: 'long'}; console.log(new Intl.DateTimeFormat('en-US', options).format(x));Ahora use el primero para la siguiente solución:
let x = new Date().getDay() if (x < 5) return // cancel order here.Parece ser una cuestión de evaluar si el día estádentro de un rango o no (número dentro de un rango de números).
Suponiendo que está usando días de domingo a sábado como 0 a 6, debería ser así:
// Evaluating if a day is inside working shift ('_from' starting shift, '_to' ending shift) function inRange(day, _from, _to) { if(day >= _from && day <= _to) return true; return false; }EDITAR: Después de pensarlo, hay algunos casos extremos que no hemos considerado.
Supongamos que tiene un día no laborable el lunes (lo que podría ser común en algunos países). Si intenta evaluarlo usando rangos, encontrará el domingo como un día no laborable también (ya que el domingo es 0, pero el rango comienza desde el lunes, que es 1).
Por lo tanto, debemos cambiar la lógica para verificar si el día solicitado no es laborable o no.
La forma más fácil de hacerlo es creando un diccionario, asignando cada día a un valor booleano que dirá si ese día es libre o no:
let workingDays = { Sunday: true, Monday: true, Tuesday: true, Wednesday: true, Thursday: true, Friday: true, Saturday: true }Luego, solo deberá especificar los días no laborables así
// Working everyday except by Monday workingDays.Monday = false;Finalmente, puede realizar verificaciones para verificar si el restaurante estará funcionando el día solicitado.
// Am I working on Monday? if(workingDays.Monday) { // do something } else { // nope. Come another day. }También puede especificar el nombre del campo como una cadena, lo cual es útil si desea verificar usando una variable
let requestedDay; // fill this variable somewhere else ... // is the requested day available? if(workingDays[requestedDay]) { // Do something }Finalmente, dado que el valor de retorno de getDay() es un número entero de 0 a 6, es posible que deba buscar por índice:
// Monday == 1 if( workingDays[Object.keys(workingDays)[1]] ) // blablaO podría envolverlo como una función para mejorar la legibilidad
// Wrap function inside workingDays dictionary workingDays.at = function(n) { return this[Object.keys(this)[n]] }; // Usage workingDays.at(1); // gives Monday status (boolean) // Creating dictionary let workingDays = { Sunday: true, Monday: true, Tuesday: true, Wednesday: true, Thursday: true, Friday: true, Saturday: true, at: function(n) { return this[Object.keys(this)[n]] } } // Setting a day as non available workingDays.Monday = false; // or workingDays["Monday"] = false; // or workingDays.at(1) = false; // Verifying whether a given day is available if(workingDays[givenDay]) { // blabla } // or if(workingDays.at(number)) { // blabla }