javascript - 使用 Moment.js 和 Twix.js,我可以按月列出一系列日期,但每一天都等于开始日期中的那一天吗?

标签 javascript momentjs

我希望使用 Moment.js 和 Twix.js 列出两个日期之间的日期范围,以每月为间隔,但每一天都等于开始日期中的那一天?相反,列表中的日期都从每个月的第一天开始。下面是我的代码。

var itr = moment.twix(new Date('2017-01-15'),new Date('2017-04-20')).iterate("months");
var range=[];
while(itr.hasNext()){
    range.push(itr.next().format("YYYY-MMM-DD"))
}
alert(range);

结果为 2017-Jan-01、2017-Feb-01 等,但我想要的是 2017-Jan-15、2017-Feb-15 等

有没有办法配置 Twix 或 Moment 来做我想做的事?我知道我可能会找到一些纯 JS 来执行此操作,但我正在为我使用的平台编写一个小插件,而 Moment 和 Twix 为我提供了很多我需要的灵 active 和选项。

谢谢。

最佳答案

它似乎不可能开箱即用,可能有充分的理由,比如并非所有月份都相等,闰年的出现等等。

让我们以开始日期为 2017-01-31 和结束日期为 2017-03-31 为例。迭代器没有返回 2017-02-31,这使得问题不适定。在非闰年的情况下,即使 YYYY-01-29 也可能成为问题。

话虽如此,对于不适定的问题,我们可以做出一些妥协。假设您预先知道您不会遇到上述情况,或者您接受范围内的某些元素进入下个月,我们可以按如下方式修改上述代码:

var startDate = moment('2017-01-15');
var firstDay = startDate.date();
var range=[];

var itr = startDate.twix('2017-04-20').iterate('months');
while(itr.hasNext()){
    range.push(itr.next().add(firstDay, 'days').format('YYYY-MMM-DD'));
}

console.log(range);
<script src="https://momentjs.com/downloads/moment.js"></script>
<script src="http://isaaccambron.com/twix.js/twix.js/dist/twix.js"></script>

我们基本上记录开始日期的日期并将其添加到迭代器返回的每个时刻对象。

关于javascript - 使用 Moment.js 和 Twix.js,我可以按月列出一系列日期,但每一天都等于开始日期中的那一天吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47837376/

相关文章:

javascript - 通过 DS.store 方法请求特定的嵌套 url

javascript - 对输入元素的每次更改运行函数 : JQuery

javascript - 编码不当的 JQuery : naming dependancies

javascript - 根据 JavaScript 中选定的月份获取星期一日期

javascript - Moment.js 接受 12 小时和 24 小时时间

javascript - 如何使用 moment.js 在用户时区上自动转换

javascript - 如何在不同的计数器中控制一个变量

javascript - 有没有更快的方法来清空 HTML 选择框?

javascript - 如何用 moment.js 改变时间?

javascript - 今天的日期 : Moment construction falls back to js Date