Javascript getDay返回4月,6月,9月,11月的错误值

问题描述

|| 我正在使用位于以下位置的此脚本:http://www.javascriptkit.com/script/script2/dyndateselector.shtml 如果您尝试使用它,然后转到4月,6月,9月或11月中的任何一个,则您会发现“星期几”列不正确。这是错误数据的列表(x开头y的东西显示在下个月。) 问题月份: 4/4月(从星期日开始,而不是星期五开始) 可能从星期日开始 6月6日(从星期五开始,而不是星期三开始) 七月从星期五开始 9月9日(从星期六开始,而不是星期四开始) 十月从星期六开始 11月11日(从周四开始,而不是周二开始) 十二月从星期四开始 您会注意到,每个有漏洞的月份都是从下个月的一天开始的,但其他所有月份似乎都是正确的。 关于这个问题,我找不到任何东西。有人能帮忙吗?单独的实际Javascript可以在这里找到,并且getDay()方法出现在第125行:http://pastebin.com/0zuBYrzv 我已经在Firefox和Chrome中进行了测试。 这是一些非常简单的代码来演示该问题:
<script>
var d = new Date();
d.setMonth(5);
d.setFullYear(2011);
d.setDate(1);
alert(d.getDay());
</script>
这将创建一个带有消息“ 5”的警报,表示星期五(5 + 1 = 6,星期五是一周的第六天),而实际上星期三是一周的开始。     

解决方法

        实际上,这非常有趣,因为我猜测明天您的原始代码将再次按需运行。 我认为正在发生的是您正在创建一个新的
Date
,它将自动初始化到今天(5月31日)。 然后,您将月份设置为6月,基本上就是说将其设置为6月31日。该日期不存在,因此javascript会将其转换为7月1日。 最后,您设置了日期,但是由于您的月份不再是您想要的日期,因此结果将是错误的。     ,        看起来1月为0,12月为11。     ,        显然,如果我设置月份,年份和日期,JavaScript会不喜欢它。我要做的是将它们全部设置在一个函数中,如下所示:
<script>
var d = new Date();
d.setFullYear(2011,5,1);
alert(d.getDay());
</script>
    ,        我认为这是Javascript日期对象中的错误。 请看下面的代码。 (我正在在线使用w3school \的JSref工具来快速查看它。) 请注意,w3学校自己会告诉以下使用的方法。   实例化日期的一些示例:      今天的var =新的Date()   var d1 =新日期(\“ 1975年10月13日11:13:00 \”)   var d2 = new Date(79,24)(//这个错误-意外的结果!!!)   var d3 = new Date(79,24,11,33,0) 因此,在使用此Date对象时,请当心,看起来某些实例化日期的方法比其他方法更好。
<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);
whatDayIsToday(d0);

</script>
输出(全部使用2011年1月1日的某种格式)是: 今天是星期六, 一周的第六天。 (正确,今年一月一日是一个星期六) 今天是星期六, 一周的第六天。 (正确) 今天是不确定的 一周中的第N天。 (格式错误,不起作用-预期中) 今天是星期二, 一周的第二天。 (错误-意外) 今天是星期二, 一周的第二天。 (错误-意外) 今天是星期三, 一周的第三天。 (错误-意外) 根据对这个问题的其他答案,我想这与我当前所在的日期(2011年8月26日)有关-这将是我开始的新Date()以及日期和/或日期年以错误的顺序申请。 但是,如果这件事可行,那肯定会很好!     ,        这是典型的错误方法:
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\",\"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
}
用ѭ6构造日期将日期设置为1月1日,这很好,因为日期不是31日,并且1月有31天,这给了我们所需的空间。它不会在31日失败,并且我们不需要以任何特殊顺序设置数据。它将始终有效。 如果用户将月份设置为9月(30天),日期设置为31,则数据对象将保留10月1日或9月1日(取决于设置顺序)。这无关紧要,因为它们都是错误的。简单检查一下日期是否是我们设置的日期,它将告诉我们该日期是否为现有日期,否则,我们可以告诉用户。     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...