Javascript Datejs:获取一周的天数

Javascript Datejs:获取一周的天数,javascript,Javascript,我也在用。我也一定错过了。有没有办法让我知道一周的天数 我知道我可以使用数组等价,但是这个库太好了,我想我错过了它,我到处都找了 更新: 我也知道我可以使用date getDay方法,但我认为有一种datejs替代方法可以纠正内置date对象的一些奇怪行为。您可以使用标准的date方法获取数字,或者: 只需在Date对象上使用内置函数: new Date().getDay(); 此代码通过现有的一种算法计算1700/1/1之后日期的星期几 var weekDay = function(year

我也在用。我也一定错过了。有没有办法让我知道一周的天数

我知道我可以使用数组等价,但是这个库太好了,我想我错过了它,我到处都找了

更新:


我也知道我可以使用date getDay方法,但我认为有一种datejs替代方法可以纠正内置date对象的一些奇怪行为。

您可以使用标准的
date
方法获取数字,或者:

只需在
Date
对象上使用内置函数:

new Date().getDay();

此代码通过现有的一种算法计算1700/1/1之后日期的星期几

var weekDay = function(year, month, day) {
                  var offset = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334];
                  var week   = {0:'Sunday', 
                                1:'Monday', 
                                2:'Tuesday', 
                                3:'Wednesday', 
                                4:'Thursday', 
                                5:'Friday', 
                                6:'Saturday'};
                  var afterFeb = (month > 2)? 0 : 1;
                  aux = year - 1700 - afterFeb;
                  // dayOfWeek for 1700/1/1 = 5, Friday
                  dayOfWeek  = 5;                      
                  // partial sum of days betweem current date and 1700/1/1
                  dayOfWeek += (aux + afterFeb) * 365;
                  // leap year correction
                  dayOfWeek += parseInt(aux / 4) - 
                               parseInt(aux / 100) + 
                               parseInt((aux + 100) / 400);
                  // sum monthly and day offsets
                  dayOfWeek += offset[month - 1] + (day - 1);
                  dayOfWeek = parseInt(dayOfWeek % 7);

                  return [dayOfWeek, week[dayOfWeek]];
              };  


console.log(weekDay(2013, 6, 15)[0] == 6, weekDay(2013, 6, 15)[1] == "Saturday");
console.log(weekDay(1969, 7, 20)[0] == 0, weekDay(1969, 7, 20)[1] == "Sunday");
console.log(weekDay(1945, 4, 30)[0] == 1, weekDay(1945, 4, 30)[1] == "Monday");
console.log(weekDay(1900, 1, 1)[0]  == 1,  weekDay(1900, 1, 1)[1] == "Monday");
console.log(weekDay(1789, 7, 14)[0] == 2, weekDay(1789, 7, 14)[1] == "Tuesday"); 

我想你只是使用getDay,datejs扩展了Date原型,但是它的原始功能应该仍然可以正常工作。但是datejs的存在是为了纠正原始的Date对象错误,所以我认为有一个替代getDay方法的方法。@lool Date.js的存在主要是为了扩展原始的
Date
对象,添加未标准化的常用方法,例如自定义格式。
Date
对象中没有太多需要“修复”的内容。Date.js本身(第837-840行)。当然可以,但datejs也可以纠正奇怪的行为和bug,我真的不知道主要的原因是什么,或者没有一个原因,但我认为它可以纠正它。@lolol
getDay
是一个
Date
对象的集合。你希望Date.js能从中纠正什么“奇怪的行为”?我不知道。有吗?我转向datejs,以避免研究每个内置日期对象错误或奇怪行为的解决方法。但是你不认为datejs应该有一个特定的方法来实现这一点,即使它除了调用getDay之外什么都不做吗?@lolool
Date
对象实际上并没有那么坏。您可能会发现兼容性问题的地方是对最近添加的支持,例如和解析。
var weekDay = function(year, month, day) {
                  var offset = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334];
                  var week   = {0:'Sunday', 
                                1:'Monday', 
                                2:'Tuesday', 
                                3:'Wednesday', 
                                4:'Thursday', 
                                5:'Friday', 
                                6:'Saturday'};
                  var afterFeb = (month > 2)? 0 : 1;
                  aux = year - 1700 - afterFeb;
                  // dayOfWeek for 1700/1/1 = 5, Friday
                  dayOfWeek  = 5;                      
                  // partial sum of days betweem current date and 1700/1/1
                  dayOfWeek += (aux + afterFeb) * 365;
                  // leap year correction
                  dayOfWeek += parseInt(aux / 4) - 
                               parseInt(aux / 100) + 
                               parseInt((aux + 100) / 400);
                  // sum monthly and day offsets
                  dayOfWeek += offset[month - 1] + (day - 1);
                  dayOfWeek = parseInt(dayOfWeek % 7);

                  return [dayOfWeek, week[dayOfWeek]];
              };  


console.log(weekDay(2013, 6, 15)[0] == 6, weekDay(2013, 6, 15)[1] == "Saturday");
console.log(weekDay(1969, 7, 20)[0] == 0, weekDay(1969, 7, 20)[1] == "Sunday");
console.log(weekDay(1945, 4, 30)[0] == 1, weekDay(1945, 4, 30)[1] == "Monday");
console.log(weekDay(1900, 1, 1)[0]  == 1,  weekDay(1900, 1, 1)[1] == "Monday");
console.log(weekDay(1789, 7, 14)[0] == 2, weekDay(1789, 7, 14)[1] == "Tuesday");