2

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

我已经在 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/

谢谢你。

4

2 回答 2

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)startDate[0]中的最后一个日期进行比较。endDateendDate[endDate.length - 1]


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

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

这非常适合比较它们:

// 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

因此,从 1 月 1 日到 6 月 1 日之间大约有五个月的时间。如果在您的情况下,您想变得更加人性化(并确保月份数相差不超过两个),那么您比较它们的方式完全可以。


另一个小建议:如果您稍后要比较这些日期,您可能希望将Dates 存储在数组中,而不是字符串中。并且,.push()将某些内容添加到数组中是一种比分配到更常见的方法arr[arr.length]

// I would change the beginning of insert() to something like this:
function insert() {
    var newStartDate = new Date(document.getElementById('datepicker1').value);
    var newEndDate = new Date(document.getElementById('datepicker2').value);
    startDate.push(newStartDate);
    endDate.push(newEndDate);

    // …
}
于 2013-08-30T16:57:22.770 回答
0

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

于 2013-08-31T17:23:39.890 回答