Javascript getDay返回的四月、六月、九月、十一月的值不正确
我正在使用位于此处的脚本: 如果您尝试使用它,并转到4月、6月、9月或11月的任意一个,您将注意到“星期几”列不正确。这是一个不正确数据的列表(x开始y显示的是下个月的数据) 窃听月份: 4月4日(从星期日开始,而不是星期五) 五月从星期天开始 6月6日(从星期五开始,而不是星期三) 七月从星期五开始 9月9日(从星期六开始,而不是星期四) 十月从星期六开始 11月11日(从周四开始,而不是周二) 十二月从星期四开始 您会注意到,每个被窃听的月份都是从下个月的第二天开始,而其他月份似乎都是正确的 我找不到关于这个问题的任何信息。有人能帮忙吗?这里可以找到实际的Javascript,getDay()方法出现在第125行: 我已经在Firefox和Chrome上进行了测试 下面是一些非常简单的代码来演示这个问题:Javascript getDay返回的四月、六月、九月、十一月的值不正确,javascript,Javascript,我正在使用位于此处的脚本: 如果您尝试使用它,并转到4月、6月、9月或11月的任意一个,您将注意到“星期几”列不正确。这是一个不正确数据的列表(x开始y显示的是下个月的数据) 窃听月份: 4月4日(从星期日开始,而不是星期五) 五月从星期天开始 6月6日(从星期五开始,而不是星期三) 七月从星期五开始 9月9日(从星期六开始,而不是星期四) 十月从星期六开始 11月11日(从周四开始,而不是周二) 十二月从星期四开始 您会注意到,每个被窃听的月份都是从下个月的第二天开始,而其他月份似乎都是正确的
<script>
var d = new Date();
d.setMonth(5);
d.setFullYear(2011);
d.setDate(1);
alert(d.getDay());
</script>
var d=新日期();
d、 一个月(5);
d、 全年(2011年);
d、 设定日期(1);
警惕(d.getDay());
这将创建一个带有消息“5”的警报,意思是星期五(5+1=6,星期五是一周中的第6天),而实际上星期三是一周的开始。看起来0是一月,11是十二月。显然JavaScript不喜欢我设置月份、全年和日期。我必须做的是在一个函数中设置它们,如下所示:
<script>
var d = new Date();
d.setFullYear(2011, 5, 1);
alert(d.getDay());
</script>
var d=新日期();
d、 设定全年(2011年5月1日);
警惕(d.getDay());
这实际上非常有趣,因为我猜明天您的原始代码将再次按照您的需要工作
我认为正在发生的是您正在创建一个新的日期
,它将自动初始化到今天(5月31日)。
然后你把月份定为6月,基本上说是6月31日。这个日期不存在,所以javascript将把它转换为7月1日。
最后您设置了日期,但由于您的月份不再是您想要的,因此结果将是错误的。我认为这是Javascript的日期对象中的一个错误。 请看下面的代码。 (我正在使用联机快速查看。) 请注意,下面使用的方法由 实例化日期的一些示例: var today=新日期()
var d1=新日期(“1975年10月13日11:13:00”)
var d2=新日期(79,5,24)(//这是错误的-意外结果!!!)
变量d3=新日期(79,5,24,11,33,0) 因此,在使用此日期对象时请小心,某些实例化日期的方法似乎比其他方法更好
<script type="text/javascript">
function whatDayIsToday(date)
{
var weekday=new Array(7);
weekday[0]="Sunday";
weekday[1]="Monday";
weekday[2]="Tuesday";
weekday[3]="Wednesday";
weekday[4]="Thursday";
weekday[5]="Friday";
weekday[6]="Saturday";
document.write("Today is " + weekday[date.getDay()] + ", <br />");
document.write("the " + date.getDay() + getSuffix(date.getDay()) + " day of the week. <br /><br />")
}
function getSuffix(num)
{
return (num>3)?"th":(num==3)?"rd":(num==2)?"nd":(num==1)?"st":"";
}
//CORRECT
var d3 = new Date("01/01/2011");
whatDayIsToday(d3);
//CORRECT
var d2 = new Date("01/01/2011");
whatDayIsToday(d2);
//DOESN'T WORK
var d5 = new Date("1-1-2011");
whatDayIsToday(d5);
//WRONG
var d4 = new Date("2011", "01", "01");
whatDayIsToday(d4);
//DAY OF WEEK IS WRONG
var d = new Date(2011, 1, 1);
whatDayIsToday(d);
//DAY OF WEEK IS ALSO WRONG
var d0 = new Date(11, 1, 1);
whatDayIsToday(d0);
</script>
功能WhatDayistDay(日期)
{
var weekday=新数组(7);
工作日[0]=“周日”;
工作日[1]=“周一”;
工作日[2]=“星期二”;
工作日[3]=“星期三”;
工作日[4]=“周四”;
工作日[5]=“周五”;
工作日[6]=“周六”;
编写(“今天是”+工作日[date.getDay()]+”,
);
document.write(“the”+date.getDay()+getSuffix(date.getDay())+“day of the week.
”)
}
函数getSuffix(num)
{
返回(num>3)?“th”:(num==3)?“rd”:(num==2)?“nd”:(num==1)?“st”:”;
}
//正确的
var d3=新日期(“2011年1月1日”);
星期几(d3);
//正确的
var d2=新日期(“2011年1月1日”);
星期几(d2);
//不起作用
var d5=新日期(“2011年1月1日”);
星期几(d5);
//错
var d4=新日期(“2011”、“01”、“01”);
星期几(d4);
//星期几是错误的
var d=新日期(2011年1月1日);
星期几(d);
//星期几也是错误的
var d0=新日期(11,1,1);
星期几(d0);
输出(均采用2011年1月1日的某种格式)为:
今天是星期六,
一周的第六天。(正确,今年1月1日是星期六)
今天是星期六,
一周的第六天。(正确)
今天是不确定的,
一周中的第二天。(格式错误,无法工作-应为)
今天是星期二,
一周的第二天。(错误-意外)
今天是星期二,
一周的第二天。(错误-意外)
今天是星期三,
一周中的第三天。(错误-意外)
根据对这个问题的其他回答,我猜这与我当前所在的日期有关。(2011年8月26日)-这将是我开始的新日期(),并且日期和/或年份顺序错误。
不过,这肯定会很好 这是典型的错误方法:
var days = ["Söndag", "Måndag", "Tisdag", "Onsdag", "Torsdag", "Fredag", "Lördag"];
var d = new Date();
d.setFullYear(selectYear.options[selectYear.selectedIndex].value);
d.setMonth(selectMonth.options[selectMonth.selectedIndex].value-1);
d.setDate(selectDay.options[selectDay.selectedIndex].value);
alert(days[d.getDay()]);
它大部分时间都能工作。但当当前日期为31时,以及当设置为少于31天的月份时,尝试将日期设置为31时,它会遇到问题
这是一个好方法:
var days = ["Söndag", "Måndag", "Tisdag", "Onsdag", "Torsdag", "Fredag", "Lördag"];
var d = new Date(0); // solves all problems for existing dates
d.setFullYear(selectYear.options[selectYear.selectedIndex].value);
d.setMonth(selectMonth.options[selectMonth.selectedIndex].value-1);
d.setDate(selectDay.options[selectDay.selectedIndex].value);
if( d.getDate() == selectDay.options[selectDay.selectedIndex].value ) {
alert(days[d.getDay()]);
}
else {
alert("this date doesn't exist"); // date was changed cuz date didn't exist
}
使用新日期(0)
构造日期将日期设置为1月1日,这很好,因为日期不是31日,1月有31天,这为我们提供了所需的空间。它不会在31号失败,我们不需要按任何特殊顺序设置数据。它将永远有效
如果用户将月份设置为9月(30天),将日期设置为31日,则数据对象将保留10月1日或9月1日(取决于您设置它们的顺序)。这是无关紧要的,因为他们都错了。只要简单检查一下日期是否是我们设置的日期,就会告诉我们该日期是否是现有日期,如果不是,我们可以告诉用户这一点。这是因为Javascript的月和日是以零为基础的,而不是以一为基础的。请注意,当我使用4/April时,它会被考虑在内,如果您按住Ctrl+F键,您将看到(m-1),所以它改为3。我认为这与
date
对象的date
属性的setter函数有关。看起来setFullYear
的3参数版本考虑了所有需要更改的日期,但是setDate
没有。非常有趣。setFullYear按正确的顺序设置它们:日、月、年;年、日、月;月、日、年;或者一天,一年,一个月。哦,我明白了!这是验证,如果我设置了天,月,年,它工作正常。
var days = ["Söndag", "Måndag", "Tisdag", "Onsdag", "Torsdag", "Fredag", "Lördag"];
var d = new Date(0); // solves all problems for existing dates
d.setFullYear(selectYear.options[selectYear.selectedIndex].value);
d.setMonth(selectMonth.options[selectMonth.selectedIndex].value-1);
d.setDate(selectDay.options[selectDay.selectedIndex].value);
if( d.getDate() == selectDay.options[selectDay.selectedIndex].value ) {
alert(days[d.getDay()]);
}
else {
alert("this date doesn't exist"); // date was changed cuz date didn't exist
}