Javascript date 函数返回错误的星期几
Javascript date function returns wrong day of the week
我的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是我在玩弄日期修复,希望我能找到一个黄金组合,到目前为止什么都没有。
因为它
是倒退的。日期构造函数看起来像-
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])
);
为什么不使用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");}
代码报告某些日期的正确工作日这一事实只是一个巧合。您使用月作为年,将日用作月,将年用作日。
交换值,以便获得Date
构造函数期望的年、月、日顺序:
var userDate = new Date(
parseInt(birthdayArray[2], 10),
parseInt(birthdayArray[0], 10)-1,
parseInt(birthdayArray[1], 10)
);
此外,parseInt
采用第二个参数,即基数,当您解析具有前导零的值时,指定这一点尤其重要,因为默认情况下它们被解释为基数 8。
由于您已经验证了用户在表单中输入的日期 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
的浏览器
相关文章:
- Javascript返回错误的Date值(NodeJS)
- Date.js错误地分析了ISO 8601 UTC日期
- new Date返回NaN或从服务器日期()开始的错误时间
- 在 Javascript 中执行新的 Date.toString() 时出现错误字符
- AngularJS $filter(date) 返回错误的格式
- Javascript new Date() 返回错误的日期
- Javascript Date() 有时会返回错误的值
- JS Date() 返回正确的时区,但返回错误的日期
- jQuery date 函数在 IE 中返回错误的值
- Javascript date 函数返回错误的星期几
- Date 对象中的 Javascript 语法错误
- Javascript Date 字符串构造错误的日期
- 系统日期正确,但新的 Date() 返回错误的值
- $.ajax 解析器错误时处理包含新 Date() 元素的 JSON
- Javascript Date.setHours()正在修改一个我没有引用的Date对象,使用了错误的日期
- new Date()设置了错误的月份
- JavaScript Date.UTC 在不同的时区给出错误的日期
- Javascript方法Date()在我的系统上返回了错误的日期(2月9日而不是9月2日),
- JSON epoch to date函数返回错误的日期
- 如果day是01,JavaScript date返回错误的月份