在javascript中计算上一个结束日期和下一个开始日期之间的差距

时间:2013-08-30 10:10:03

标签: javascript html date

编辑:我在下面的答案中尝试了一些建议,但我仍然没有得到适当的结果。任何进一步的帮助将不胜感激。

我在HTML中实现了一个表单,它将2个日期作为输入,并将它们附加到两个数组中。然后我计算了几个月中两个日期之间的差异。

a)表格询问用户他/她的五年历史,因此用户应该能够输入日期,直到他/她获得五年(60个月)的财富。对于这个问题,我尝试了以下功能:

if (typeof startArray[index] !== 'null' && endArray[index] !== null) {
var result = difference_between(dateFrom, dateTo);
document.getElementById("txtResult").value = result
if(result <= 60) {
document.getElementById('datepicker1').reset();
document.getElementById('datepicker2').reset();
document.getElementById('txtResult').reset();
}
else{
alert("Go to the next section");
document.getElementById('btnSave').disable = true;
}

b)表格应该能够计算结束日期和下一个开始日期之间的差距,并且不应该有超过两个月的差距。例如,表格应该能够比较我结束学校的日期和我开始大学的日期,如果它超过2个月,那么我应该提出错误信息。这是我的功能:

function GetDifference() {
var dateFrom = new Date(document.getElementById("datepicker1").value);
var dateTo = new Date(document.getElementById("datepicker2").value);
document.getElementById("txtResult").value = difference_between(dateFrom, dateTo);

//Is there a gap of more than 2 months?
if (endDate.length && (difference_between(endDate[endDate.length - 1], dateFrom)) > 2) {
    window.alert("There should not be a gap of more than two months in this section.");
}
}

这是JSFIDDLE:http://jsfiddle.net/stelios13/KsuxV/111/

谢谢。

2 个答案:

答案 0 :(得分:1)

startDate.splice(0,1) 删除 startDate中的第一个元素,我觉得这不是你想要的。我会做这样的检查:

function GetDifference() {
    var dateFrom = new Date(document.getElementById("datepicker1").value);
    var dateTo = new Date(document.getElementById("datepicker2").value);
    document.getElementById("txtResult").value = difference_between(dateFrom, dateTo);

    // Right now the things in endDate are strings so this won't work, but see below
    if(endDate.length && (difference_between(endDate[endDate.length - 1], dateFrom)) > 2){
        window.alert("There should not be a gap of more than two months in this section. Plsease fill in your details appropriately");
        document.getElementById("btnSave").disabled = true; 
    }
}

...首先,我确保endDate不为空,然后我在endDate中获取最后一个日期并将其与dateFrom进行比较。这就是你要找的东西吗?

您可以执行类似检查五年范围的操作:首先确保startDateendDate不为空,然后比较startDate中的第一个日期({{ 1}})最后一个日期位于startDate[0]endDate)。


顺便说一句,在JavaScript中,日期可以转换为数字(从任意起始点开始的毫秒数,1970年1月1日):

endDate[endDate.length - 1]

这非常适合比较它们:

// The unary `+` operator converts its operand to a number:
console.log(+new Date()); // Just now, logged 1377880989982

因此,从1月1日到6月1日之间大约有五个月。如果,在你的情况下,你想要更加人性化(并确保月份数不超过两个),那么你比较它们的方式就完全没问题了。


另一个小建议:如果您稍后要比较这些日期,您可能希望将// How many milliseconds in a month? var month = 1000 * 60 * 60 * 24 * 365.25 / 12; // Subtraction also converts its operands to numbers: console.log( Math.round((new Date('2013-06-01') - new Date('2013-01-01')) / month) ); // Logs 4.96 存储在数组中,而不是字符串。并且,Date是向数组添加内容而不是分配给.push()的更常见方式:

arr[arr.length]

答案 1 :(得分:0)

也许moment.js可能对您有用。它是一个用于处理日期的js库,它还具有diff函数。

相关问题