下面的代码旨在提供两件事。距下一个业务季度的天数以及下一个业务季度的日期。这对第三季度有效,但自从开始显示第四季度以来,结果就不同了。
您将看到日期显示下个月的开始。这是有意的。它是下一季度的起点。
有人看出我做错了什么吗?
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 季度的开始。
但是,您不必以任何不同的方式对待第 4 季度,因为如果季度为 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()}`));
关于javascript - 下一个营业季度的输出日期和计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59180528/