2012-01-27 14 views
6

Este código donde restamos días de una fecha no obtiene los resultados correctos.Javascript restando días de la fecha

function get_Ash_Wednesday_date (year, Easter_month, Easter_day) { 
    var Easter_date = new Date(); 
    Easter_date.setFullYear(year, Easter_month-1, Easter_day); 
    var Ash_Wednesday = new Date(); 

    Ash_Wednesday.setFullYear(year); 
    Ash_Wednesday.setDate(Easter_date.getDate()-46); 
    return Ash_Wednesday; 
} 

De la fecha de Pascua restar 46 días. Esto generalmente se remonta a febrero y debe dar cuenta de los años bisiestos. Las fechas del Miércoles de Ceniza calculadas están desactivadas en uno o dos días, p. para el Miércoles de Ceniza de 2012 debe ser 02/22, para 2013 debe ser 02/13, para 2014 debe ser 03/05, para 2015 debe ser 02/18, para 2016 debe ser 02/10. El mes es incorrecto todo el tiempo, debe ser febrero o marzo. ¿Qué podría explicar la diferencia entre los días devueltos y el mes?

Year: 2012 Ash Wednesday month 11 Ash Wednesday day 23 Easter Month: 4 Easter Day: 8 
Year: 2013 Ash Wednesday month 12 Ash Wednesday day 16 Easter Month: 3 Easter Day: 31 
Year: 2014 Ash Wednesday month 12 Ash Wednesday day 5 Easter Month: 4 Easter Day: 20 
Year: 2015 Ash Wednesday month 11 Ash Wednesday day 20 Easter Month: 4 Easter Day: 5 
Year: 2016 Ash Wednesday month 12 Ash Wednesday day 12 Easter Month: 3 Easter Day: 27 
Year: 2017 Ash Wednesday month 12 Ash Wednesday day 1 Easter Month: 4 Easter Day: 16 
Year: 2018 Ash Wednesday month 11 Ash Wednesday day 16 Easter Month: 4 Easter Day: 1 
Year: 2019 Ash Wednesday month 12 Ash Wednesday day 6 Easter Month: 4 Easter Day: 21 
Year: 2020 Ash Wednesday month 11 Ash Wednesday day 27 Easter Month: 4 Easter Day: 12 
Year: 2021 Ash Wednesday month 11 Ash Wednesday day 19 Easter Month: 4 Easter Day: 4 
Year: 2022 Ash Wednesday month 12 Ash Wednesday day 2 Easter Month: 4 Easter Day: 17 
Year: 2023 Ash Wednesday month 11 Ash Wednesday day 24 Easter Month: 4 Easter Day: 9 
Year: 2024 Ash Wednesday month 12 Ash Wednesday day 16 Easter Month: 3 Easter Day: 31 
Year: 2025 Ash Wednesday month 12 Ash Wednesday day 5 Easter Month: 4 Easter Day: 20 
Year: 2026 Ash Wednesday month 11 Ash Wednesday day 20 Easter Month: 4 Easter Day: 5 
Year: 2027 Ash Wednesday month 12 Ash Wednesday day 13 Easter Month: 3 Easter Day: 28 
Year: 2028 Ash Wednesday month 12 Ash Wednesday day 1 Easter Month: 4 Easter Day: 16 
Year: 2029 Ash Wednesday month 11 Ash Wednesday day 16 Easter Month: 4 Easter Day: 1 
Year: 2030 Ash Wednesday month 12 Ash Wednesday day 6 Easter Month: 4 Easter Day: 21 
Year: 2031 Ash Wednesday month 11 Ash Wednesday day 28 Easter Month: 4 Easter Day: 13  
Year: 2032 Ash Wednesday month 12 Ash Wednesday day 13 Easter Month: 3 Easter Day: 28 
Year: 2033 Ash Wednesday month 12 Ash Wednesday day 2 Easter Month: 4 Easter Day: 17 
Year: 2034 Ash Wednesday month 11 Ash Wednesday day 24 Easter Month: 4 Easter Day: 9 
Year: 2035 Ash Wednesday month 12 Ash Wednesday day 10 Easter Month: 3 Easter Day: 25 
Year: 2036 Ash Wednesday month 11 Ash Wednesday day 28 Easter Month: 4 Easter Day: 13 
Year: 2037 Ash Wednesday month 11 Ash Wednesday day 20 Easter Month: 4 Easter Day: 5 
Year: 2038 Ash Wednesday month 12 Ash Wednesday day 10 Easter Month: 4 Easter Day: 25 
Year: 2039 Ash Wednesday month 11 Ash Wednesday day 25 Easter Month: 4 Easter Day: 10 
Year: 2040 Ash Wednesday month 11 Ash Wednesday day 16 Easter Month: 4 Easter Day: 1 
Year: 2041 Ash Wednesday month 12 Ash Wednesday day 6 Easter Month: 4 Easter Day: 21 
Year: 2042 Ash Wednesday month 11 Ash Wednesday day 21 Easter Month: 4 Easter Day: 6 
+0

No entiendo su salida, lo explique por favor: lo que quiere que se muestre? ¿cómo se crea desde 'Ash_Wednesday'? y en qué tipo de bucle se ejecuta tu función? – maialithar

Respuesta

12

Vio una nota en las referencias para no pasar valores negativos a setDate().

probar este lugar:

var Ash_Wednesday = new Date ( 
    Easter_date.getFullYear(), 
    Easter_date.getMonth(), 
    (Easter_date.getDate()-46) 
) 

Esta solución Finding date by subtracting X number of days from a particular date in Javascript no parece funcionar por más tiempo

+0

Pero restar 46 días hará que el mes sea diferente. Entonces no debería especificar el mes para la nueva fecha. – user823527

+0

No sé lo que va a lograr eventualmente, pero esta solución funcionará como lo implica su sintaxis: reste 46 días de la Pascua. Si no desea 46 días, agregue su propio número (lo mismo ocurre con el mes) :) – pong

+0

Esto es lo que funcionó: 'var Ash_Wednesday = new Date (Easter_date.getYear(), Easter_date.getMonth(), (Easter_date.getDate)() -46)); '.getDate en lugar de .getDay. – user823527

Cuestiones relacionadas