У меня есть сценарий, в котором я нажимаю каждое значение параметра (Date) в массив и оценивая каждый элемент.
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
.
Этот скрипт оценивает значение false, если я задаю значение itineraryParamDate
как 30112018//ddmmyyyy.It должен оцениваться как true.
Мое сомнение → var travelDate = i.toString();
не оценивает правильность значения. Может кто-нибудь посоветует мне об этом?
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);
У ОП есть ряд проблем с образцом кода. Если кто-то хочет получить истинный или ложный результат, тогда нужно использовать логические значения true и false, потому что "true" и "false" являются непустыми строками, поэтому каждый оценивает как true. Если кто-то хочет вернуть значение, то нужно использовать функцию, которая в этом случае называется Test(). Кроме того, внутреннее условие if должно использовать логическое ИЛИ вместо логического И. Когда daysDiff имеет значение 34, как это произошло 26 октября с этим кодом, тогда условие if имеет смысл только при использовании логического ИЛИ. Наконец, нет необходимости переопределять переменные в for-loop. Лучше определить значения вне цикла и установить значения по умолчанию. В цикле for вы можете переназначить значения для этих переменных.