JavaScript SWITCH CASE не работает с переменными Формат даты - PullRequest
1 голос
/ 15 февраля 2020

Дело должно прекратиться в День Картахены. Я пытаюсь вычислить Dynami c Publi c Праздники колумбийского календаря с INPUT VAR. Этот код определяется тремя основными функциями: 1 для вычисления PASCUA DAY , 1 для вычисления MONDAY publi c праздничных дней , но с динамическими значениями c week и последней для stati c publi c праздничные дни .

Я не могу найти, почему не работает, существует много консольного журнала для целей отладки.

var date = new Date();
var dateYear = date.getFullYear();

// Dia de San Jose
var dateSanJose = dateYear + "/03/19";
dateSanJose = new Date(dateSanJose);

// Dia de la epifania
var dateEpifania = dateYear + "/01/06";
dateEpifania = new Date(dateEpifania);

// Dia de San Pedro y San Pablo
var dateSPSP = dateYear + "/06/29";
dateSPSP = new Date(dateSPSP);

// Dia de la Asunción de la Virgen
var dateAsuncVirgen = dateYear + "/08/15";
dateAsuncVirgen = new Date(dateAsuncVirgen);

// Día de la raza
var dateRaza = dateYear + "/10/12";
dateRaza = new Date(dateRaza);

// Día de todos los santos
var dateSantos = dateYear + "/11/01";
dateSantos = new Date(dateSantos);

// Día de la independencia de cartagena
var dateCartagena = dateYear + "/11/11";
dateCartagena = new Date(dateCartagena);


//---------- FECHAS FIJAS -----------//
var dateNuevoAno = new Date(dateYear + "/01/01");
var dateTrabajo = new Date(dateYear + "/05/01");
var dateIndependencia = new Date(dateYear + "/07/20");
var dateBatallaBoyaca = new Date(dateYear + "/08/07");
var dateInmaculada = new Date(dateYear + "/12/08");
var dateNavidad = new Date(dateYear + "/12/25");

//---------- FECHAS SEGÚN PASCUA -----------//
var pascuaDay = pascua(dateYear);
var dateJuevesSanto = operateDays(3, pascuaDay, false);
var dateViernesSanto = operateDays(2, pascuaDay, false);
var dateAscencion = operateDays(43, pascuaDay, true);
var dateCorpusChristi = operateDays(64, pascuaDay, true);
var dateSagradoCorazon = operateDays(71, pascuaDay, true);

//----------- FECHAS TRASLADABLES----------//

var dateSanJose = trasladableHolidays(dateSanJose);
var dateEpifania = trasladableHolidays(dateEpifania);
var dateSPSP = trasladableHolidays(dateSPSP);
var dateAsuncVirgen = trasladableHolidays(dateAsuncVirgen);
var dateRaza = trasladableHolidays(dateRaza);
var dateSantos = trasladableHolidays(dateSantos);
var dateCartagena = trasladableHolidays(dateCartagena);


function trasladableHolidays(dateVariable){
    dateCorrect = dateVariable;
    dateCorrect.setDate(dateVariable.getDate() + (1 + 7 - dateVariable.getDay()) % 7);
    return dateCorrect;
}

function operateDays(days, date, suma){
    var initialDate = new Date(date);
    var newDate = new Date(date);
    if (suma) {
        newDate.setDate(initialDate.getDate() + days);
    }else{
        newDate.setDate(initialDate.getDate() - days);
    }
    return newDate;
}

//Función para realizar el cálculo del domingo de pascua
function pascua(year) {
    if(year>1900 && year<2099) {
        M=24; N=5; 
    } 
    else if (year>2100 && year<2199) { 
        M=24; N=6; 
    }
    else if (year>2200 && year<2299) { 
        M=25; N=0; 
    } 
    a = year % 19;
    b = year % 4;
    c = year % 7;
    d = ((19*a) + M) % 30;
    e = ((2*b) + (4*c) + (6*d) + N) % 7;
    f = d + e;
    if (f < 10) { 
        dia = f + 22; mes = 3; 
    } 
    else  {  
        dia = f - 9;  mes = 4; 
    }
    if(dia==26 && mes==4){ 
        dia = 19; 
    }
    if(dia==25 && mes==4 && d==28 && e==6 && a>10){
        dia = 18;
    }
    pascua = new Date(year,mes-1,dia);
    return pascua;
};

console.log("Año nuevo: " + dateNuevoAno)
console.log("Día del trabajo: " + dateTrabajo)
console.log("Día de la independencia: " + dateIndependencia)
console.log("La batalla de Boyaca: " + dateBatallaBoyaca)
console.log("Día de la inmaculada concepción: " + dateInmaculada)
console.log("Día de Navidad: " + dateNavidad)
console.log("Jueves Santo: " + dateJuevesSanto)
console.log("Viernes Santo: " + dateViernesSanto)
console.log("Día de la ascensión: " + dateAscencion)
console.log("Día del corpus christi: " + dateCorpusChristi)
console.log("Día del sagrado corazón: " + dateSagradoCorazon)
console.log("Día de los reyes magos: " + dateEpifania)
console.log("Día de San Jose: " + dateSanJose)
console.log("Dia de San Pedro y San Pablo: " + dateSPSP)
console.log("Día de la Asunción de la virgen: " + dateAsuncVirgen)
console.log("Día de la raza: " + dateRaza)
console.log("Día de todos los santos: " + dateSantos)
console.log("Día de la independencia de cartagena: " + dateCartagena)

//------------------------------------//
//----Validación Motor de Reglas-----//
//-----------------------------------//

var InputDate = new Date("2020-11-16 00:00:00");
console.log("DEFINICION INPUT DATE: " + InputDate);


//InputDate = dateCartagena
switch (InputDate) 
   {
    case dateCartagena :
       console.log("TODAY IS CARTAGENA")
        break;
    case 1:
        console.log("Today is Monday")
        break;
    default:
        console.log("VALOR POR DEFECTO SW CASE: " + dateCartagena);
        break;
}

Это окончательное решение, надеюсь, что это работает для всех остальных.

var date = new Date();
var dateYear = date.getFullYear();

// Dia de San Jose
var dateSanJose = dateYear + "/03/19";
dateSanJose = new Date(dateSanJose);

// Dia de la epifania
var dateEpifania = dateYear + "/01/06";
dateEpifania = new Date(dateEpifania);

// Dia de San Pedro y San Pablo
var dateSPSP = dateYear + "/06/29";
dateSPSP = new Date(dateSPSP);

// Dia de la Asunción de la Virgen
var dateAsuncVirgen = dateYear + "/08/15";
dateAsuncVirgen = new Date(dateAsuncVirgen);

// Día de la raza
var dateRaza = dateYear + "/10/12";
dateRaza = new Date(dateRaza);

// Día de todos los santos
var dateSantos = dateYear + "/11/01";
dateSantos = new Date(dateSantos);

// Día de la independencia de cartagena
var dateCartagena = dateYear + "/11/11";
dateCartagena = new Date(dateCartagena);


//---------- FECHAS FIJAS -----------//
var dateNuevoAno = new Date(dateYear + "/01/01");
var dateTrabajo = new Date(dateYear + "/05/01");
var dateIndependencia = new Date(dateYear + "/07/20");
var dateBatallaBoyaca = new Date(dateYear + "/08/07");
var dateInmaculada = new Date(dateYear + "/12/08");
var dateNavidad = new Date(dateYear + "/12/25");

//---------- FECHAS SEGÚN PASCUA -----------//
var pascuaDay = pascua(dateYear);
var dateJuevesSanto = operateDays(3, pascuaDay, false);
var dateViernesSanto = operateDays(2, pascuaDay, false);
var dateAscencion = operateDays(43, pascuaDay, true);
var dateCorpusChristi = operateDays(64, pascuaDay, true);
var dateSagradoCorazon = operateDays(71, pascuaDay, true);

//----------- FECHAS TRASLADABLES----------//

var dateSanJose = trasladableHolidays(dateSanJose);
var dateEpifania = trasladableHolidays(dateEpifania);
var dateSPSP = trasladableHolidays(dateSPSP);
var dateAsuncVirgen = trasladableHolidays(dateAsuncVirgen);
var dateRaza = trasladableHolidays(dateRaza);
var dateSantos = trasladableHolidays(dateSantos);
var dateCartagena = trasladableHolidays(dateCartagena);


function trasladableHolidays(dateVariable){
    dateCorrect = dateVariable;
    dateCorrect.setDate(dateVariable.getDate() + (1 + 7 - dateVariable.getDay()) % 7);
    return dateCorrect;
}

function operateDays(days, date, suma){
    var initialDate = new Date(date);
    var newDate = new Date(date);
    if (suma) {
        newDate.setDate(initialDate.getDate() + days);
    }else{
        newDate.setDate(initialDate.getDate() - days);
    }
    return newDate;
}

//Función para realizar el cálculo del domingo de pascua
function pascua(year) {
    if(year>1900 && year<2099) {
        M=24; N=5; 
    } 
    else if (year>2100 && year<2199) { 
        M=24; N=6; 
    }
    else if (year>2200 && year<2299) { 
        M=25; N=0; 
    } 
    a = year % 19;
    b = year % 4;
    c = year % 7;
    d = ((19*a) + M) % 30;
    e = ((2*b) + (4*c) + (6*d) + N) % 7;
    f = d + e;
    if (f < 10) { 
        dia = f + 22; mes = 3; 
    } 
    else  {  
        dia = f - 9;  mes = 4; 
    }
    if(dia==26 && mes==4){ 
        dia = 19; 
    }
    if(dia==25 && mes==4 && d==28 && e==6 && a>10){
        dia = 18;
    }
    pascua = new Date(year,mes-1,dia);
    return pascua;
};

//console.log("Año nuevo: " + dateNuevoAno)
//console.log("Día del trabajo: " + dateTrabajo)
//console.log("Día de la independencia: " + dateIndependencia)
//console.log("La batalla de Boyaca: " + dateBatallaBoyaca)
//console.log("Día de la inmaculada concepción: " + dateInmaculada)
//console.log("Día de Navidad: " + dateNavidad)
//console.log("Jueves Santo: " + dateJuevesSanto)
//console.log("Viernes Santo: " + dateViernesSanto)
//console.log("Día de la ascensión: " + dateAscencion)
//console.log("Día del corpus christi: " + dateCorpusChristi)
//console.log("Día del sagrado corazón: " + dateSagradoCorazon)
//console.log("Día de los reyes magos: " + dateEpifania)
//console.log("Día de San Jose: " + dateSanJose)
//console.log("Dia de San Pedro y San Pablo: " + dateSPSP)
//console.log("Día de la Asunción de la virgen: " + dateAsuncVirgen)
//console.log("Día de la raza: " + dateRaza)
//console.log("Día de todos los santos: " + dateSantos)
//console.log("Día de la independencia de cartagena: " + dateCartagena)

//------------------------------------//
//----Validación Motor de Reglas-----//
//-----------------------------------//

var InputDate = new Date("2020-01-06 00:00:00");
console.log("DEFINICION INPUT DATE: " + InputDate);


//InputDate = dateCartagena
switch (InputDate.toString()) 
   {
    case dateCartagena.toString() :
       console.log("TODAY IS CARTAGENA")
        break;
    case dateSantos.toString() :
       console.log("TODAY IS dateSantos")
        break;
    case dateRaza.toString() :
       console.log("TODAY IS dateRaza")
        break;
    case dateAsuncVirgen.toString() :
       console.log("TODAY IS dateAsuncVirgen")
        break;
    case dateSPSP.toString() :
       console.log("TODAY IS dateSPSP")
        break;
    case dateSanJose.toString() :
       console.log("TODAY IS CARTAGENA")
        break;
    case dateEpifania.toString() :
       console.log("TODAY IS dateEpifania")
        break;
    case dateSagradoCorazon.toString() :
       console.log("TODAY IS dateSagradoCorazon")
        break;
    case dateCorpusChristi.toString() :
       console.log("TODAY IS dateCorpusChristi")
        break;
    case dateAscencion.toString() :
       console.log("TODAY IS dateAscencion")
        break;
    case dateViernesSanto.toString() :
       console.log("TODAY IS dateViernesSanto")
        break;
    case dateJuevesSanto.toString() :
       console.log("TODAY IS dateJuevesSanto")
        break;
    case dateInmaculada.toString() :
       console.log("TODAY IS dateInmaculada")
        break;
    case dateBatallaBoyaca.toString() :
       console.log("TODAY IS dateBatallaBoyaca")
        break;
    case dateIndependencia.toString() :
       console.log("TODAY IS dateIndependencia")
        break;
    case dateTrabajo.toString() :
       console.log("TODAY IS dateTrabajo")
        break;
    case dateNuevoAno.toString() :
       console.log("TODAY IS dateNuevoAno")
        break;
    default:
        console.log("VALOR POR DEFECTO SW CASE: " + dateCartagena);
        break;
}

Ответы [ 2 ]

1 голос
/ 15 февраля 2020

Вы не можете сравнивать объекты даты таким образом.

Несмотря на то, что обе эти даты имеют одинаковое значение. Они не равны.

const dateString = "2020/11/11"
let date1 = new Date(dateString)
let date2 = new Date(dateString)

console.log('date1', date1)
console.log('date2', date2)

console.log('equal =', date1 === date2)

Чтобы это исправить, вы можете позвонить toString() и сравнить строки.

const dateString = "2020/11/11"
let date1 = new Date(dateString)
let date1String = date1.toString()
let date2 = new Date(dateString)
let date2String = date2.toString()

console.log('date1String', date1String)
console.log('date2String', date2String)

console.log('equal =', date1String === date2String)
0 голосов
/ 15 февраля 2020

Здесь проблема - оператор var InputDate = new Date("2020-11-16 00:00:00");, поскольку InputDate будет объектом, а оператор switch работает с примитивным типом данных.

...