我正在使用此脚本:http://www.javascriptkit.com/script/script2/dyndateselector.shtml
如果你尝试了,并且去了4月,6月,9月或11月的任何一个,你会注意到星期几列不正确。这是一个不正确的数据列表(x开始的东西显示在下个月。)
错误月份: 4月4日(周日而不是周五开始) 可能从周日开始
6月6日(星期五而不是星期三开始) 七月从星期五开始 9月9日(星期六而不是星期四开始) 十月从星期六开始 11月11日(星期四而不是星期二开始) 12月开始于周四您会注意到每个错误的月份都是从下个月的某一天开始,但所有其他月份似乎都是正确的。
我在这个问题上找不到任何东西。有人能帮忙吗?可以在此处找到实际的Javascript,并在第125行发出getDay()方法: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 + 1 = 6,星期五是本周的第6天),而实际上星期三是本周的开始。
答案 0 :(得分:8)
这实际上非常有趣,因为我猜明明天你的原始代码会再次按你的意愿运行。
我认为正在发生的是你正在创建一个新的Date
,它将自动初始化为今天(五月三十一日)。
然后你将月份设置为6月,你基本上将它设为6月31日。此日期不存在,因此javascript会将其变为7月1日。
最后你设置了日期,但由于你的月份不再是你想要的,结果将是错误的。
答案 1 :(得分:4)
看起来0是1月,11是12月。
答案 2 :(得分:1)
如果我设置月份,全年和日期,显然JavaScript不喜欢它。我必须做的是将它们全部设置在一个函数中,如下所示:
<script>
var d = new Date();
d.setFullYear(2011, 5, 1);
alert(d.getDay());
</script>
答案 3 :(得分:0)
我认为这是Javascript日期对象中的一个错误。 请查看以下代码。 (我在线使用w3school's JSref tool快速查看。) 请注意,以下使用的方式由w3 schools themselves告知。
实例化日期的一些例子:
var today = new Date()
var d1 = new Date(“1975年10月13日11:13:00”)
var d2 = new Date(79,5,24)(//这是错误的 - 意外结果!!!)
var d3 = new Date(79,5,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, 1);
whatDayIsToday(d0);
</script>
输出(全部使用2011年1月1日的某种格式)是:
Today is Saturday, the 6th day of the week. (CORRECT, January first this year was a saturday) Today is Saturday, the 6nd day of the week. (CORRECT) Today is undefined, the NaNnd day of the week. (WRONG FORMATTING, DOESN'T WORK - EXPECTED) Today is Tuesday, the 2nd day of the week. (WRONG - UNEXPECTED) Today is Tuesday, the 2nd day of the week. (WRONG - UNEXPECTED) Today is Wednesday, the 3nd day of the week. (WRONG - UNEXPECTED)
根据这个问题的其他答案,我猜这与我目前(2011年8月26日)的那天有关 - 这将是我的首发新日期()以及以错误的顺序应用的日期和/或年份。 但是,肯定会很好if this thing worked!
答案 4 :(得分:-1)
这是典型的错误做法:
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
}
使用new Date(0)
构建日期将日期设置为1月1日,这很好,因为日期不是31日,1月有31天,这给了我们所需的空间。它不会在31日失败,我们不需要按任何特殊顺序设置数据。它总是有效。
如果用户将月份设置为9月(30天),将日期设置为31,则数据对象将保持1个oct或1个sep(具体取决于您将其设置为的顺序)。这是无关紧要的,因为它们都是错的。如果日期是我们设置的日期,只需检查日期是否为现有日期,如果不是,我们可以告诉用户。