Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript getDay返回的四月、六月、九月、十一月的值不正确_Javascript - Fatal编程技术网

Javascript getDay返回的四月、六月、九月、十一月的值不正确

Javascript getDay返回的四月、六月、九月、十一月的值不正确,javascript,Javascript,我正在使用位于此处的脚本: 如果您尝试使用它,并转到4月、6月、9月或11月的任意一个,您将注意到“星期几”列不正确。这是一个不正确数据的列表(x开始y显示的是下个月的数据) 窃听月份: 4月4日(从星期日开始,而不是星期五) 五月从星期天开始 6月6日(从星期五开始,而不是星期三) 七月从星期五开始 9月9日(从星期六开始,而不是星期四) 十月从星期六开始 11月11日(从周四开始,而不是周二) 十二月从星期四开始 您会注意到,每个被窃听的月份都是从下个月的第二天开始,而其他月份似乎都是正确的

我正在使用位于此处的脚本:

如果您尝试使用它,并转到4月、6月、9月或11月的任意一个,您将注意到“星期几”列不正确。这是一个不正确数据的列表(x开始y显示的是下个月的数据)

窃听月份: 4月4日(从星期日开始,而不是星期五) 五月从星期天开始

6月6日(从星期五开始,而不是星期三) 七月从星期五开始

9月9日(从星期六开始,而不是星期四) 十月从星期六开始

11月11日(从周四开始,而不是周二) 十二月从星期四开始

您会注意到,每个被窃听的月份都是从下个月的第二天开始,而其他月份似乎都是正确的

我找不到关于这个问题的任何信息。有人能帮忙吗?这里可以找到实际的Javascript,getDay()方法出现在第125行:

我已经在Firefox和Chrome上进行了测试

下面是一些非常简单的代码来演示这个问题:

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