【问题标题】:Outputting date of next business quarter and count输出下一季度的日期和数量
【发布时间】:2019-12-04 16:27:05
【问题描述】:

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

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

有人看到我做错了吗?

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>

【问题讨论】:

  • nextQ = new Date (today.getFullYear() + 1, 1, 1) 应该将月份设置为 0(一月),而不是 1(二月)。
  • @RobG 对。我怎么能这样做呢?
  • nextQ = new Date (today.getFullYear() + 1, 0, 1)
  • @RobG 谢谢!那行得通。随时留下答案。您能解释一下如何将月份设置为 0 吗?我在一个堆栈问题上找到了大部分代码,不知道 nextQ 是如何得出下一个季度的实际情况的。

标签: javascript jquery date datetime


【解决方案1】:

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,并且日期将自动滚动到下一年(即它将变为 1 月次年),例如:

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()}`));

【讨论】:

  • 感谢您的帮助。将if (quarter == 4) { 更改为if (quarter == 3) { 或保持原样更有意义吗?我不明白为什么只有三个月的季度设置为 4。
  • @Paul — 只需根据答案使用它,不需要 if 来处理与其他季度不同的任何季度。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多