2012-01-27 147 views
6

此代码从日期中扣除日期不会得到正确的结果。Javascript从日期中扣除日期

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; 
} 

从复活节的日期我减去46天。这通常可以追溯到二月份,并且必须考虑闰年。所计算的灰星期三日期关闭一天或两天,例如,对于2012年灰周三应为02/22,2013年应为02/13,2014年应为03/05,2015年应为02/18,2016年应为02/10。这个月每次都是错的,应该是二月或三月。什么可以解释返回日期和月份的差异?

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

我不明白你的输出,解释请:你想让它显示了什么?你如何从“Ash_Wednesday”创建它?你的函数运行在什么样的循环中? – maialithar 2012-01-27 16:48:24

回答

12

在参考文献中注意不要将负值传递给setDate()。

试试这个:

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

该解决方案似乎Finding date by subtracting X number of days from a particular date in Javascript没有再工作下去

+0

但是,减去46天将使月份不同。所以我不应该指定新日期的月份。 – user823527 2012-01-27 17:02:31

+0

不知道你最终会达成什么,但这个解决方案将按照其语法所暗示的那样工作:从复活节中减去46天。如果你不想要46天添加你自己的数字(同样的月份:) :) – pong 2012-01-27 17:07:55

+0

这是什么工作:var var Ash_Wednesday = new Date(Easter_date.getYear(),Easter_date.getMonth(),(Easter_date.getDate ()-46));'.getDate而不是.getDay。 – user823527 2012-01-27 17:08:08