使用开始月份和结束月份的时刻来获取月份范围

时间:2018-10-17 09:37:06

标签: javascript date momentjs

我使用的是moment library,我想用它来获取字符串月的数组,并带有开始日期和结束日期。因此,例如当我有两个日期时:

const from = moment('2018-05-01', 'YYYY-MM-DD').format('MMMM');
  const to = moment('2018-07-01', 'YYYY-MM-DD').format('MMMM');

然后如何获取月份范围作为字符串数组,则在给定日期下看起来像这样:

['May', 'June', 'July']

有没有一种方法可以立即实现,而最优雅的方法是什么?

3 个答案:

答案 0 :(得分:2)

您可以使用moment.months对其进行切片以仅获得所需的月份

var months = moment.months();
console.log(JSON.stringify(months))

console.log(JSON.stringify(months.slice(4,7)))
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>

答案 1 :(得分:0)

请暂时找到以下格式。

var fromDate = moment('2018-05-01','YYYY-MM-DD');
var toDate = moment('2018-07-01','YYYY-MM-DD');
var monthData = [];

while (toDate > fromDate || fromDate.format('M') === toDate.format('M')){

monthData.push(fromDate.format('MMMM'));
fromDate.add(1,'month');

}
console.log(monthData); // Output ["May", "June", "July"]

谢谢

答案 2 :(得分:0)

仅显示没有moment.js的解决方案。

可以使用 toLocaleString 以浏览器默认语言提供月份名称。要获取从第3个月到第5个月(包括3个月)的名称,请从数组中将其切成薄片,例如

span

创建月份名称列表有些昂贵,但是只运行一次,并且只需要12个日期就可以了。

它需要更好的错误处理,例如检查a{ background:black; color:#fff; width:100px; height:100px; display:inline-block; text-align:center; position:relative; border-radius:100%; } a span{ position:absolute; top:50%; left:50%; transform:translate(-50%, -50%); }<a href="#"><span>Link</span></a>/* Return array of month names for month number range in the * browser default language. * E.g. 3,5 returns ['March','April','May] with default language English * Assumes Gregorian calendar, 12 months in year. If input is invalid, * returns an empty array * * @param {number|string} [startMonth=1] - calendar month number * @param {number|string} [endMonth=12] - calendar month number * @returns {string[]} Array of month names from startMonth to endMonth inclusive. */ var getMonthNames = (function () { var months = new Array(12).fill(0).map((v,i)=> new Date(2000,i).toLocaleString(undefined,{month:'long'}) ); return function(startMonth=1, endMonth=12) { return isNaN(+startMonth) || isNaN(+endMonth)? [] : months.slice(--startMonth, endMonth); } }()); // Example [['03', '03'], // Single month ['06'], // Month to end of year [], // Month 1 to 12 ['01', '09'], // Month 1 to month 9 ['foo'] // Erroneous input ].forEach(args => console.log(`${args.toString()}: ${getMonthNames(...args).join(', ')}`) );start <= end0 < start < 13是整数,等等。