[英]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.