javascript - 下一个营业季度的输出日期和计数

标签 javascript jquery date datetime

下面的代码旨在提供两件事。距下一个业务季度的天数以及下一个业务季度的日期。这对第三季度有效,但自从开始显示第四季度以来,结果就不同了。

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

有人看出我做错了什么吗?

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/

相关文章:

javascript - location.href 未定义

javascript - 折叠 Accordion 时,Bootstrap 单选按钮不检查

javascript - 在提示之间传递数据

javascript - 画廊中的图像在方向改变时消失

jquery select2刷新数据

SQL 返回 2008 年第 13 周的结果(未分组)

javascript - 避免发件人也收到 firestore 通知

jquery - Bootstrap 工具提示无法与 aria-driven 一起使用

javascript - 在 JavaScript 中处理公元 1000 年前的日期的技巧

mysql - 现在将日期与 MySQL [Angular] 中的日期进行比较的问题