Javascript Date()返回某些日期的错误工作日
在发现2017年9月1日及以后日期的工作日错误后,我发现更改1 statement(setDate)的顺序会返回正确的结果。请参阅下面的代码。当我进入1.9.17(2017年9月1日)时,我得到了星期天,更改代码后的星期五。谁能给我解释一下吗?FF、Chrome和Edge出现问题Javascript Date()返回某些日期的错误工作日,javascript,Javascript,在发现2017年9月1日及以后日期的工作日错误后,我发现更改1 statement(setDate)的顺序会返回正确的结果。请参阅下面的代码。当我进入1.9.17(2017年9月1日)时,我得到了星期天,更改代码后的星期五。谁能给我解释一下吗?FF、Chrome和Edge出现问题 <body> <input type="text" onchange="wday(this.value);"> <script> function wday() { var x
<body>
<input type="text" onchange="wday(this.value);">
<script>
function wday() {
var x = wday.arguments[0].split(".");
if (x[2].length<4) x[2] += 2000;
var y = new Date();
y.setFullYear(x[2]);
y.setMonth(x[1]-1);
y.setDate(x[0]);
var z = new Array("So","Mo","Di","Mi","Do","Fr","Sa");
alert("wrong "+z[y.getDay()])
wday2(wday.arguments)
}
function wday2() {
var x = wday.arguments[0].split(".");
if (x[2].length<4) x[2] += 2000;
var y = new Date();
y.setDate(x[0]);
y.setMonth(x[1]-1);
y.setFullYear(x[2]);
var z = new Array("So","Mo","Di","Mi","Do","Fr","Sa");
alert("correct "+z[y.getDay()])
}
</script>
</body>
函数wday(){
var x=wday.arguments[0]。拆分(“.”);
如果(x[2],lengthsetMonth
可以将月份设置为当前日期(今天是31日;9月有30天)不存在的月份。溢出将在下个月转换为适当的日期
> var d = new Date();
> d
Wed Aug 31 2016 13:30:07 GMT-0700 (PDT)
> d.setMonth(8); // September
> d
Sat Oct 01 2016 13:30:07 GMT-0700 (PDT)
一次构造所有日期以完全避免此类问题。您的年份调整代码也被破坏(它将连接2000
,而不是添加它),并且使用func.arguments
引用参数是非常糟糕的做法
var WEEKDAYS = ["So", "Mo", "Di", "Mi", "Do", "Fr", "Sa"];
function wday(dateString) {
var parts = dateString.split('.');
var year = parseInt(parts[2], 10);
var month = parseInt(parts[1], 10);
var day = parseInt(parts[0], 10);
if (parts[2].length < 4) {
year += 2000;
}
var date = new Date(year, month - 1, day);
return WEEKDAYS[date.getDay()];
}
var工作日=[“So”、“Mo”、“Di”、“Mi”、“Do”、“Fr”、“Sa”];
函数wday(日期字符串){
var parts=dateString.split('.');
var year=parseInt(第[2]部分,第10节);
var月=parseInt(第[1]部分,第10节);
var-day=parseInt(部分[0],10);
if(零件[2]。长度<4){
年份+=2000年;
}
var日期=新日期(年、月-1、日);
返回工作日[date.getDay()];
}
使用更多功能获得奖励积分
const WEEKDAYS = ["So", "Mo", "Di", "Mi", "Do", "Fr", "Sa"];
function parseYear(yearString) {
const year = parseInt(yearString, 10);
return yearString.length < 4 ?
year + 2000 :
year;
}
function parseDottedDate(dateString) {
const [day, month, year] = dateString.split('.');
return new Date(
parseYear(year),
parseInt(month, 10) - 1,
parseInt(day, 10)
);
}
function wday(dateString) {
const date = parseDottedDate(dateString);
return WEEKDAYS[date.getDay()];
}
const平日=[“So”、“Mo”、“Di”、“Mi”、“Do”、“Fr”、“Sa”];
函数parseYear(yearString){
const year=parseInt(yearString,10);
返回yearString.length<4?
2000年以后:
年份;
}
函数parseDottedDate(日期字符串){
const[day,month,year]=dateString.split('.');
返回新日期(
年,,
parseInt(第10个月)-1,
parseInt(第10天)
);
}
函数wday(日期字符串){
const date=parseDottedDate(日期字符串);
返回工作日[date.getDay()];
}
您应该登录y
查看它的创建日期,我敢打赌年份不正确,因为17
不是setFullYear
的有效输入,或者至少它不会将年份设置为2017代码不正确:如果(x[2].length非常感谢-您的代码工作得非常完美。我为+2000的混淆道歉。但我仍然不明白为什么在使用显式数字时会出现相同的错误:var y=new Date();y.setFullYear(2017);y.setMonth(8);y.setDate(1);周日返回,而不是Friday@Fritz:无论它们来自变量还是文本,行为都是相同的。newdate()
取当前日期,即2016年8月31日。setFullYear
将年份设置为2017年,将日期设置为2017年8月31日。setMonth
将月份设置为9月,将日期设置为2017年9月31日,但没有9月31日,因此将日期设置为10月1日。最后,setDate
将日期设置为2017年9月1日这已经是第一次了。就是这样:我不知道new Date()以当前日期作为初始值。我通常依赖于德国网站wiki.selfhtml.org。他们没有提到初始日期。再次感谢-你让我度过了美好的一天。