繁体   English   中英

输出下一个季度的日期和计数

[英]Outputting date of next business quarter and count

我在下面有以下代码,旨在提供两件事。 距下一个营业季度和下一个营业季度日期的天数。 这适用于第三季度,但自从它开始显示第四季度以来,结果就没有了。

您将看到日期显示下个月的开始。 这是有意的。 它是下一季度的起点。

有没有人看到我做错了什么?

 var today = new Date(); var quarter = Math.floor((today.getMonth() + 3) / 3); var nextQ; if (quarter == 4) { nextQ = new Date (today.getFullYear() + 1, 1, 1); } else { nextQ = new Date (today.getFullYear(), quarter * 3, 1); } var millis1 = today.getTime(); var millis2 = nextQ.getTime(); var dayDiff = (millis2 - millis1) / 1000 / 60 / 60 / 24; dayDiffRound = Math.floor(dayDiff); $('#nextDrawingCount').text(dayDiffRound); var drawingDate = nextQ.toLocaleString('en-us', { weekday: 'long' }) + ", " + nextQ.toLocaleString('default', { month: 'long' }) + " " + ("0" + nextQ.getDate()).slice(-2) + ", " + nextQ.getFullYear(); $('#nextDrawing').text(drawingDate);
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <p class="dGw">The next drawing is <span id="nextDrawingCount"></span> days from now (<span id="nextDrawing"></span>).</p>

ECMAScript 月份是零索引的,所以如果季度是 4:

if (quarter == 4) {
  nextQ = new Date (today.getFullYear() + 1, 1, 1);

nextQ设置为 2 月 1 日,而不是 1 月 1 日。 因此将月份索引更改为 0:

if (quarter == 4) {
  nextQ = new Date (today.getFullYear() + 1, 0, 1);

得到 1 月 1 日。

else分支之所以起作用,是因为:

  nextQ = new Date (today.getFullYear(), quarter * 3, 1);

如果季度是 2,则月份设置为 6,即 7 月或第 3 季度的开始。

但是,您不必以任何不同的方式对待 Q4,因为如果季度是 4,那么 3x4 是 12,日期将自动滚动到下一年(即它将成为下一年的一月),例如:

 function getNextQuarter(today = new Date()) { var quarter = Math.floor((today.getMonth() + 3) / 3); return new Date (today.getFullYear(), quarter * 3, 1); } [new Date(), // current date new Date(2019,5,1), // 1 June 2019 new Date(2019,11,1) // 1 December 2019 ].forEach(d => console.log(`${d.toDateString()} => ${getNextQuarter(d).toDateString()}`));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM