在循环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);
<!-- https://meta.***.com/a/375985/ --> <script src="https://gh-canon.github.io/stack-snippet-console/console.min.js"></script>
【讨论】:
这很完美,正是我所需要的。谢谢! @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 的值