[英]Get the months between two dates JavaScript
首先,我要澄清这个问题不是Difference in months between two dates in javascript or javascript month difference的重复
我的问题具体是关于获取两个日期之间的月份,而不是月份数。
因此,如果date1
是 11/01/2022 (mm/dd/yyyy) 并且date2
是 02/20/2023,它应该是 output 一个月份数组,包括date1
和date2
的月份,例如["November", "December", "January", "February"]
。 我需要知道如何返回两个日期之间的实际月份,而不是月份数。 有人可以解释这样做的方法吗?
问题中链接的帖子已经是一个好的开始。
也许想想当你想把结果写到一张纸上时你会怎么做。
当我们知道开始的月份时,作为索引 [0...11],我们可以从那里开始计数并从数组中添加月份名称:
const xmas = new Date("December 25, 1999 23:15:30");
const summer = new Date("June 21, 2003 23:15:30");
function monthsBetween(dstart, dend) {
const monthNames = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
let result = [];
let current = dstart.getMonth();
let end = (dend.getFullYear() - dstart.getFullYear()) * 12 + dend.getMonth();
for (;current <= end; current += 1) {
result.push(monthNames[current % 12]);
}
return result;
}
console.log(monthsBetween(xmas, summer)); // [December, January, February..., December, January, ...., June (multiple years)
console.log(monthsBetween(xmas, xmas)); // ["December"]
在您的示例 2022-11-01 到 2023-02-20 中, current
将从 10(11 月,从 0 开始索引)到 13(1:2 月从 0 开始索引 + 1 年 = 12 个月差异)
您可以遍历从开始到结束的日期,将月份名称收集为 go。
开始和结束应该是Date对象,如何将它们从时间戳(如“11/01/2022”)转换是一个单独的问题,应该在前面的步骤中处理。
/* Get month names from start date to end date * @param {Date} start - date to start from * @param {Date} end - date to end at * @param {string} lang - language for month names * @returns {string[]} month names from start to end inclusive */ function getMonthNames(start = new Date(), end = new Date(), lang = 'en') { let d = new Date(start.getFullYear(), start.getMonth()); let months = []; while (d <= end) { months.push(d.toLocaleString(lang,{month:'long'})); d.setMonth(d.getMonth() + 1); } return months; } let start = new Date(2022, 10, 1); // 01 Nov 2022 let end = new Date(2023, 1, 20); // 20 Feb 2023 console.log(getMonthNames(start, end))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.