Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Date()返回某些日期的错误工作日_Javascript - Fatal编程技术网

Javascript Date()返回某些日期的错误工作日

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

在发现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 = 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],length
setMonth
可以将月份设置为当前日期(今天是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。他们没有提到初始日期。再次感谢-你让我度过了美好的一天。