我的Javascript功能有效,但报告了一周的错误日期。有些日子它可以工作,但有些日子没有。例如,1991年1月22日正确地报告为星期二,但1994年4月4日报告错误。这是如何解决的?
另外,我如何实现一个返回“你是来自未来的条件?!”如果用户提供了将来的日期。
到目前为止,这是我的功能。
//ask user for birthday
var birthday = window.prompt("What is your birthday? (MM-DD-YYYY)", "");
var birthdayArray = birthday.split('-');
//validate entry is correct
if(birthdayArray.length !==3){
alert("invalid date")
}
//validate if date format is correct
else{
if(!birthdayArray[0].match(/^\d\d$/) ||
!birthdayArray[1].match(/^\d\d$/) ||
!birthdayArray[2].match(/^\d\d\d\d$/)){
alert("invalid date");
}
///take user input and find weekday
else{var weekDays = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday','Friday', 'Saturday'];
var userDate = new Date(
parseInt(birthdayArray[0])-1,
parseInt(birthdayArray[1])-2,
parseInt(birthdayArray[2])
);
var result = userDate.getDay();
var dayName = weekDays[result];
document.write("You were born on "+dayName);
}
}
这可以在不完全重做我的代码的情况下完成吗?
编辑:-1和-2是我玩弄日期修复,希望我能找到一个黄金组合,到目前为止没有。
答案 0 :(得分:4)
因为它倒退了。日期构造函数看起来像 -
new Date(year, month, day);
你在做 -
new Date(month, day, year);
所以它应该是 -
var userDate = new Date(
parseInt(birthdayArray[2]),
parseInt(birthdayArray[0])-1, // dates in javascript start counting at 0
parseInt(birthdayArray[1])
);
答案 1 :(得分:3)
为什么不使用Moment.js?
看看这段代码示例:
var date = moment("2016-01-31");
var weekDayNumber = date.day(); // Return the number of dayweek (0 in this case)
if (weekDayNumber === 0){console.log("Born Sunday");}
else if(weekDayNumber === 1){console.log("Born Monday");}
答案 2 :(得分:0)
代码报告某些日期的正确工作日这一事实只是巧合。您将月份用作年份,将月份用作月份,将年份用作日期。
交换值,以便获得Date
构造函数所期望的年,月,日顺序:
var userDate = new Date(
parseInt(birthdayArray[2], 10),
parseInt(birthdayArray[0], 10)-1,
parseInt(birthdayArray[1], 10)
);
此外,parseInt
采用第二个参数作为基础,这对于指定何时解析具有前导零的值尤为重要,因为默认情况下它们被解释为基数为8。
答案 3 :(得分:0)
由于您已经验证用户在MM-DD-YYYY
表单中输入了日期,因此您可以更改此
var userDate = new Date(
parseInt(birthdayArray[0])-1,
parseInt(birthdayArray[1])-2,
parseInt(birthdayArray[2])
);
到这个
var userDate = new Date(birthday);
测试代码:
var weekDays = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday','Friday', 'Saturday'];
var d = new Date("04-04-1994");
document.writeln("DATE: " + d + "<br>");
document.writeln("DAY OF THE WEEK: " + d.getDay() + "<br>");
var dayName = weekDays[d.getDay()];
document.write("You were born on "+dayName);
免责声明:仅适用于期望日期格式为MM-DD-YYYY
的浏览器