【问题标题】:How to translate this line of code to human language?如何将这行代码翻译成人类语言?
【发布时间】:2018-07-03 01:02:25
【问题描述】:

您好,我正在尝试将此日历的起始工作日从周日更改为周一。 但我不明白var k = ... 行中发生了什么。这行代码试图用人类语言表达什么? https://codepen.io/xmark/pen/WQaXdv?editors=1010

// June 2018
var k = lastDay_of_LastMonth - firstDay_of_Month+1;
27


//_____________________________________________________________________
// TEST

var lastDay_of_LastMonth = new Date(2018, 5, 0); // May 31st 2018
document.write('Today is: ' + lastDay_of_LastMonth.toLocaleString());
// Today is: 5/31/2018, 12:00:00 AM

var firstDay_of_Month = new Date(2018, 5, 1); // June 1st 2018
firstDay_of_Month."getDay()";
5

// June 2018
var k = lastDay_of_LastMonth - firstDay_of_Month+1;

lastDay_of_LastMonth.setDate(lastDay_of_LastMonth.getDate() - 6);
document.write('<br>X days ago was: ' + lastDay_of_LastMonth.toLocaleString());
// X days ago was: 5/25/2018, 12:00:00 AM

//_____________________________________________________________________

// June 2018
27 = 31 - 5+1;

我从这个线程中看到,这段代码正在计算(日期 - 天数),倒数天数。但我无法理解它用人类语言对日历代码做了什么。 31-(5+1) = 25 的数学不应该意味着它会回到过去 6 天,为什么我会得到 27 的值? Subtract days from a date in JavaScript

【问题讨论】:

标签: javascript date calendar


【解决方案1】:

根据您附加的codepen,开发人员正在使用k 来获取日历中应出现的当月以外的日期(即,如果我们的月份从周二开始,那么周日和周一在上个月,但我们需要获取这些天的“月份数字”),现在他们在两种情况下使用 k:

1:获取上个月的天数var k = lastDayOfLastMonth - firstDayOfMonth+1;

2:获取下个月的天数:

else if ( i == lastDateOfMonth ) {
  var k=1;
  for(dow; dow < 6; dow++) {
    html += '<td class="not-current">' + k + '</td>';
    k++;
  }
}

第一次,他们计算上个月最后一天和本月第一天之间的差异,这里的+1 是因为您正在使用索引。

在第二种情况下,可以肯定地说每个月都有1-6,因此它们循环最多 6 个以填满日历中的最后一周。

【讨论】:

  • 感谢您澄清之前和之后的部分,直到现在我才对它视而不见。您能否快速浏览一下我当前的代码并指出我需要深入研究的部分?因为只要一个月的第一个日期是星期日,我的日历就会中断。 *.com/questions/51014363/…
  • @Abby 我回答了你的另一个问题 :)
【解决方案2】:

此语言中的运算顺序赋予加法和减法运算符同等的优先级。

换句话说,它使用 PEMDAS。

所以它会做 31-5:26

然后 26 + 1:27

【讨论】: