我有一个脚本,其中我将每个参数值(日期)推入数组并评估每个元素。
if(frame.name == 'bookingConfirmedMbox')
{
var checkinEligible= "false";
var currDate = Date.parse(new Date());
var depDate = frame.param(itineraryParamDate);
var departureDate = depDate.toString();
var travelDateArr = new Array();
travelDateArr.push(depDate);
console.log(travelDateArr);
var travelDateArrlen = travelDateArr.length;
for (var i=0 ; i< travelDateArrlen ; i++)
{
var travelDate = travelDateArr[i].toString();
var depaDate = travelDate.replace(/(\d{2})(\d{2})(\d{4})/, "$2/$1/$3");
var dDate= Date.parse(new Date(depaDate));
var timeDiff = parseInt(dDate - currDate);
var daysDiff = Math.floor(timeDiff / (1000 * 60 * 60 * 24));
}
if (daysDiff >= 2 && daysDiff <=7 )
{
checkinEligible="true";
}
else
{
checkinEligible="false";
}
return checkinEligible;
}
此处,itineraryParamDate
是框架的参数名称,并且通过frame.param('itineraryParamDate')
的值被存储并附加在array
中。
如果我将itineraryParamDate
设置为30112018 // ddmmyyyy,则此脚本的评估结果为false。
我的疑问是-> var travelDate = i.toString();
未评估正确的值。
有人可以建议我吗?
答案 0 :(得分:1)
function Test() {
//
var frame = new Object;
frame.name = 'bookingConfirmedMbox';
var checkinEligible = false;
var currDate = null;
var strDepDate = "";
var travelDateArr = [];
var travelDateArrlen = 0;
var travelDate = "";
var dDate = "";
var timeDiff = 0;
var daysDiff = 0;
if (frame.name == 'bookingConfirmedMbox') {
currDate = Date.parse(new Date());
strDepDate = "30112018";
travelDateArr.push(strDepDate);
travelDateArrlen = travelDateArr.length;
for (let i = 0; i < travelDateArrlen; i++) {
travelDate = strDepDate.toString();
strDepDate = travelDate.replace(/(\d{2})(\d{2})(\d{4})/, "$2/$1/$3");
dDate = Date.parse(new Date(strDepDate));
timeDiff = parseInt(dDate - currDate);
daysDiff = Math.floor(timeDiff / (1000 * 60 * 60 * 24));
}
if (daysDiff >= 2 || daysDiff <= 7) {
checkinEligible = true;
} else {
checkinEligible = false;
}
}
return checkinEligible;
} // end Test();
var retval = Test();
var res = (retval) ? "Test worked" : "Test failed";
console.log(res);
OP在代码示例中存在许多问题。如果希望得到一个对或错的结果,则应该使用布尔值true和false,因为“ true”和“ false”是非空字符串,因此每个值都为true。如果希望返回一个值,则必须使用一个函数(在这种情况下称为Test())。同样,内部if条件需要使用逻辑或而不是逻辑与。当daysDiff的值保持为34(如10月26日使用此代码发生的情况)时,则if条件只有在使用逻辑OR时才有意义。最后,无需在for循环中重新声明变量。最好在循环外定义值并设置为默认值。在for循环中,您可以将值重新分配给那些变量。