Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/421.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 计算两个日期之间每月的天数_Javascript_Jquery_Html_Css - Fatal编程技术网

Javascript 计算两个日期之间每月的天数

Javascript 计算两个日期之间每月的天数,javascript,jquery,html,css,Javascript,Jquery,Html,Css,我有两个输入类型日期和一个输入类型文本 当我选择两个日期时,我想知道每个月有多少个日期 例如: 首次日期:2020年8月28日 最后日期:2020年9月3日 结果:08年4天。09年1月3日。月 我现在拥有的是计算两个日期之间天数的脚本 函数GetDays(){ var dropdt=新日期(document.getElementById(“dep”).value); var pickdt=新日期(document.getElementById(“arr”).value); 返回parseIn

我有两个输入类型日期和一个输入类型文本

当我选择两个日期时,我想知道每个月有多少个日期

例如:

首次日期:2020年8月28日

最后日期:2020年9月3日

结果:08年4天。09年1月3日。月

我现在拥有的是计算两个日期之间天数的脚本

函数GetDays(){
var dropdt=新日期(document.getElementById(“dep”).value);
var pickdt=新日期(document.getElementById(“arr”).value);
返回parseInt((dropdt-pickdt)/(24*3600*1000));
}
函数cal(){
if(document.getElementById(“dep”)){
document.getElementById(“日期数”).value=GetDays();
}
}

你能试试下面的代码吗

var a = '28.09.2020';
var b = '03.10.2020';

var calculateNumberOfDaysPerMonthAndYear = function(a, b) {
    function compareDatesOnBasedOfMonthAndYear(a, b) {
        if (b[2] > a[2]) return 1;
        if (b[2] < a[2]) return -1;

        if (b[1] > a[1]) return 1;
        if (b[1] < a[1]) return -1;
        return 0;
    }

    function getNextMonth(a) {
        var nextMonth = [ ...a ];
        nextMonth[1] += 1;
        if (nextMonth[1] === 13) {
            nextMonth[1] = 1;
            nextMonth[2] += 1;
        }

        return nextMonth;
    }

    var finalJson = {};
    var daysInMonth = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];

    var splittedDateA = a.split('.').map(d => parseInt(d));
    var splittedDateB = b.split('.').map(d => parseInt(d));

    var key = splittedDateA[1] + '.' + splittedDateA[2];
    finalJson[key] = daysInMonth[splittedDateA[1] - 1] + 1 - splittedDateA[0];
    if (splittedDateA[2] % 4 === 0) finalJson[key] += 1;

    var currentDate = getNextMonth(splittedDateA);
    while(compareDatesOnBasedOfMonthAndYear(currentDate, splittedDateB)) {
        key = currentDate[1] + '.' + currentDate[2];
        finalJson[key] = daysInMonth[currentDate[1] - 1];
        currentDate = getNextMonth(currentDate);
    }

    key = splittedDateB[1] + '.' + splittedDateB[2];
    finalJson[key] = splittedDateB[0];

    return finalJson;
};

console.log(calculateNumberOfDaysPerMonthAndYear(a, b));
var a='28.09.2020';
var b='03.10.2020';
var CalculateEnumberOfDayserMonthAndYear=函数(a,b){
函数compareDatesOnBasedOfMonthAndYear(a,b){
如果(b[2]>a[2])返回1;
如果(b[2]a[1])返回1;
如果(b[1]parseInt(d));
var splittedDateB=b.split('.').map(d=>parseInt(d));
var key=splittedDateA[1]+'.+splittedDateA[2];
finalJson[key]=daysInMonth[splittedDateA[1]-1]+1-splittedDateA[0];
如果(splittedDateA[2]%4==0)finalJson[key]+=1;
var currentDate=getNextMonth(拆分日期a);
while(比较DateSonBasedOfMonthAndYear(currentDate,splittedDateB)){
key=currentDate[1]+'.+currentDate[2];
finalJson[key]=daysInMonth[currentDate[1]-1];
currentDate=getNextMonth(currentDate);
}
key=splittedDateB[1]+'.+splittedDateB[2];
finalJson[key]=splittedDateB[0];
返回finalJson;
};
console.log(CalculateEnumberOfDayserMonthAndYear(a,b));
输出将是一个JSON对象,键是月和年的组合(例如8.2020),值是天数


我希望这会有所帮助

我想你可以试试moment.js是一款处理日期和时间的非常好的工具


像这样的?即使是闰年,比如2020年2月,你也可以得到每月的天数

函数getDays(){
var dropdt=新日期(document.getElementById(“arr”).value);
var pickdt=新日期(document.getElementById(“dep”).value);
var结果=”;

对于(var year=dropdt.getFullYear();year,我不确定您的实际问题是什么?您现有的有什么问题?如果我选择两个日期,并且它们介于两个月之间,我想知道在该范围内每月选择多少天。选择的示例日期:从2020年8月28日到2020年9月3日。)结果:08月有4天,09月有3天。要确定从开始日期到该月最后一天的天数,以及从上个月的第一个月到结束日期的天数…对于这两个月之间的任何一个月,都只是该月的完整天数。唯一需要提前检查的边缘情况是两个日期都在同一个月。你能给我一个代码示例吗?我不知道怎么写。谢谢。
    var a = moment([2007, 0, 29]);
    var b = moment([2007, 0, 28]);
    a.diff(b, 'days') // 1
const oneDay = 24 * 60 * 60 * 1000; // hours*minutes*seconds*milliseconds
const firstDate = new Date(2019, 10, 11);

const secondDate = new Date(2019, 11, 11);

const diffDays = Math.round(Math.abs((firstDate - secondDate) / oneDay));