Javascript计算两个日期之间特定月份的天数



我是javascript新手。

我有特定的月份专栏(9/30/2022,10/31/2022,11/30/2022)。我有一份有开始日期和结束日期(跨越多个月)的合同。

我需要确定合同在特定月份列中有效的天数。

示例:
联系人开始日期:09/15/2022
合同结束日期:10/24/2022该合同在2022年9月的有效天数为16天。

我发现下面的代码给出了每个月的合同期限(即)**9 - 17;10 - 23;* *

事先感谢您的帮助。

我找到了这个代码

function getDays() {
var dropdt = new Date(document.getElementById("arr").value);
var pickdt = new Date(document.getElementById("dep").value);
var result = "";
for (var year = dropdt.getFullYear(); year <= pickdt.getFullYear(); year++) {
var firstMonth = (year == dropdt.getFullYear()) ? dropdt.getMonth() : 0;
var lastMonth = (year == pickdt.getFullYear()) ? pickdt.getMonth() : 11;
for (var month = firstMonth; month <= lastMonth; month++) {
var firstDay = (year === dropdt.getFullYear() && month === firstMonth) ? dropdt.getDate() : 1;
var lastDay = (year === pickdt.getFullYear() && month === lastMonth) ? pickdt.getDate() : 0;
var lastDateMonth = (lastDay === 0) ? (month + 1) : month
var firstDate = new Date(year, month, firstDay);
var lastDate = new Date(year, lastDateMonth, lastDay);
result += (month + 1) + " - " + parseInt((lastDate - firstDate) / (24 * 3600 * 1000) + 1) + "; ";
}
}
return result;
}
function cal() {
if (document.getElementById("dep")) {
document.getElementById("number-of-dates").value = getDays();
}
计算'

下面的代码片段将生成一个对象res,其中为从零开始的月份索引("8";是九月,&;9&;是这些月份中每个月的天数:

const start=new Date("2022-09-15");
const end=new Date("2022-11-24");
let nextFirst=new Date(start.getTime()), month, days={};
do { 
month=nextFirst.getMonth();
nextFirst.setMonth(month+1);nextFirst.setDate(1);
days[month]=Math.round(((nextFirst<end?nextFirst:end)-start)/86400000);
start.setTime(nextFirst.getTime());
} while(nextFirst<end)
console.log(days);

这可以扩展成一个更可靠的函数,返回年-月组合:

function daysPerMonth(start,end){
let nextFirst=new Date(start.getTime()), year, month, days={};
do {
year=nextFirst.getFullYear(); 
month=nextFirst.getMonth();
nextFirst.setMonth(month+1);nextFirst.setDate(1);   
days[`${year}-${String(1+month).padStart(2,"0")}`]=Math.round(((nextFirst<end?nextFirst:end)-start)/86400000);
start.setTime(nextFirst.getTime());
} while(nextFirst<end)
return days;
}
[["2022-09-15","2022-11-24"],["2022-11-29","2023-02-04"]].forEach(([a,b])=>
console.log(daysPerMonth(new Date(a),new Date(b))));

管理和计算日期、时间和日期时间在javascript和跨浏览器中是出了名的挑剔。与其尝试自己定义逻辑,不如使用著名的moments .js库。

特别是要计算两个日期之间的长度,您可以使用两个时刻之间的diff函数

var a = moment([2007, 0, 29]);
var b = moment([2007, 0, 25]);
var diff = a.diff(b, 'days') // 1
console.log(diff);
<script src="https://momentjs.com/downloads/moment.js"></script>

支持的测量方法有年、月、周、日、时、分、秒。

最新更新