编辑:我在下面的答案中尝试了一些建议,但我仍然没有得到适当的结果。任何进一步的帮助将不胜感激。
我在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/
谢谢。
答案 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
进行比较。这就是你要找的东西吗?
您可以执行类似检查五年范围的操作:首先确保startDate
和endDate
不为空,然后比较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)