在循环Javascript中添加日期

Posted

技术标签:

【中文标题】在循环Javascript中添加日期【英文标题】:Add Days to Date in Loop Javascript 【发布时间】:2020-10-02 18:52:05 【问题描述】:

我需要在循环内的 javascript 中为日期添加天数。

目前,我有这个 -

var occurences = 2;
var start_date = "10/2/2020";
for(i=0; i < occurences; i++)
  var repeat_every = 2; //repeat every number of days/weeks/months
  var last = new Date(start_date);
  var day =last.getDate() + repeat_every;
  var month=last.getMonth()+1;
  var year=last.getFullYear();
  var fulldate = month + '/' + day + '/' + year;
  console.log(fulldate);

但是,这会输出 10/4/2020 两次。我知道问题是因为在循环的第 2 次迭代中,它再次简单地将 2 添加到 2020 年 10 月 2 日的日期,有没有办法在后续迭代中将 2 添加到先前的结果?

谢谢!

【问题讨论】:

这能回答你的问题吗? Add days to JavaScript Date @zcoop98 不幸的是它没有,我知道如何在日期中添加天数,我的问题更多来自循环本身,一旦我添加了 2 天,我正在努力找出一个存储此结果的方法,然后在循环的第二次迭代中将 2 天添加到上一个结果。 【参考方案1】:

您可以使用间隔的倍数,然后使用 last.setDate( last.getDate() + repeat_every ) 添加天数并获得正确的月份和年份:

var occurences = 20;
var start_date = "10/2/2020";
for(i=1; i <= occurences; i++)
  var repeat_every = 2*i; //repeat every number of days/weeks/months
  var last = new Date(start_date);
  last.setDate( last.getDate() + repeat_every );
  console.log( `$last.getDate()/$last.getMonth()+1/$last.getFullYear()` );

【讨论】:

太棒了!泰哥!【参考方案2】:

将计数器 i 设为 repeat_every 的倍数:

/*<ignore>*/console.config(maximize:true,timeStamps:false,autoScroll:false);/*</ignore>*/
var occurences = 2;
var start_date = "10/2/2020";
for(i=1; i <= occurences; i++)
  var repeat_every = 2*i; //repeat every number of days/weeks/months
  var last = new Date(start_date);
  var day =last.getDate() + repeat_every;
  var month=last.getMonth()+1;
  var year=last.getFullYear();
  var fulldate = month + '/' + day + '/' + year;
  console.log(fulldate);
&lt;!-- https://meta.***.com/a/375985/ --&gt;    &lt;script src="https://gh-canon.github.io/stack-snippet-console/console.min.js"&gt;&lt;/script&gt;

【讨论】:

这很完美,正是我所需要的。谢谢! @CodyCarmichael 或者尝试将循环外的数据存储为全局变量。 @MT0 啊,很好,这将是一个比我最初想象的更复杂的脚本。【参考方案3】:

我会将日子的生成与它们的格式/记录分开。在这里,我们有一个函数收集 count 实例,将 n 天增量添加到日期,返回 Date 对象的集合:

const everyNDays = (n, count, start = new Date()) => 
  const y = start.getFullYear(), m = start.getMonth(), d = start.getDate()
  return Array.from(length: count, (_, i) => new Date(y, m, d + (i + 1) * n))


const formatDate = (date) =>
  date .toLocaleDateString ()

console .log (
  everyNDays (2, 20) .map (formatDate)
)
// or everyNDays (2, 20) .forEach (date => console .log (formatDate (date)))
.as-console-wrapper max-height: 100% !important; top: 0

(如果您没有传递开始日期,则使用当前日期。)

然后我们map 简单的formatDate 函数在这些日期上得到一个字符串数组。

如果您希望从当前日期开始,您可以简单地将new Date(y, m, d + (i + 1) * n) 替换为new Date(y, m, d + i * n)

【讨论】:

以上是关于在循环Javascript中添加日期的主要内容,如果未能解决你的问题,请参考以下文章

等到 for 循环内的所有函数调用结束其执行 - Javascript

获取 daterangepicker bootstrap 的值

如何为所有动态生成的 div 添加常用的 Javascript 函数? [复制]

在 Python 中使用 for 循环在日期列中添加前导零

JavaScript语句

试图在JavaScript / jQuery中添加一个on click事件