使用 moment JS 获取 2 个日期之间的月份开始和结束列表

S_R*_*S_R 2 javascript momentjs

我有 2 个这样的约会

2018-01-012019-01-01

我想返回这两个日期之间所有月份的列表,但同时在列表中获取月初和月末,如下所示

 2018-01-01 - 2018-01-31
 2018-02-01 - 2018-02-28
 2018-03-01 - 2018-03-31
Run Code Online (Sandbox Code Playgroud)

对于这两个日期之间的所有月份,依此类推。我该如何使用 Moment JS 来做到这一点?

cor*_*hia 6

我会选择这样的东西:

var start = moment('2018-01-01', 'YYYY-MM-DD')
var end = moment('2019-01-01', 'YYYY-MM-DD')

while (start < end) {
  console.log(start.startOf('month').format('YYYY-MM-DD'))
  console.log(start.endOf('month').format('YYYY-MM-DD'))
  start.add(1, 'month')
}
Run Code Online (Sandbox Code Playgroud)

正如其他用户指出的那样,当您使用和moment之类的方法时, 的对象会发生变化,因此您应该考虑像这样克隆它们:startOfendOf

var startOfMonth = start.clone().startOf('month')
// ... and so on
Run Code Online (Sandbox Code Playgroud)


sja*_*han 5

只是一个小的可运行示例。小心 moment.js:时刻会发生变异!

我希望这能帮到您!

const format = 'YYYY-MM-DD';
const start = moment('2018-01-01', format), end = moment('2019-01-01', format);
const result = [];
while(start.isBefore(end)) {
  result.push({
    start: start.startOf('month').format(format), 
    end: start.endOf('month').format(format)
  });
  start.add(1, 'month');
} 

console.log(result);
Run Code Online (Sandbox Code Playgroud)
<script src="https://momentjs.com/downloads/moment.min.js"></script>
Run Code Online (Sandbox Code Playgroud)