I need to check that end date is after start date

caruofor
Kilo Contributor

I am currently trying to create a client script in a scoped application that will check that the end date is after the start date. The code runs however it runs regardless of whether the condition is met or not. What am I doing wrong?

function onSubmit(){

//g_form.getValue will get the value on on the form.

//It accepts a string value of the field name.

//This step we are gettin the value from work_start and work_end

//and placing them in a variable.

var startDate = g_form.getValue('checkin_date');

var endDate = g_form.getValue('checkout_date');

//g_user_date_time_format is a global variable in service now

//This should already defined, but just in case, we'll check!

if(typeof g_user_date_time_format !== 'undefined') {

//We will use this variable later

var format = g_user_date_time_format;

} else {

return true;

}

//Check to see if there is something defined for dates

if(startDate === "" || endDate === ""){

return true;

}

//Format the dates using the form variable

//getDateFromFormat accepts the date and the format

var startDateMs = getDateFromFormat(startDate, format);

var endDateMs = getDateFromFormat(endDate, format);

//Check if the start is before the end date

if(startDateMs < endDateMs){

return true;

}

//This will clear any messages currently on the SN form

g_form.clearMessages();

//At this point we are checking to make sure there are values for each date

//Then displaying a message on the form that it is invalid.

if(startDateMs === 0 || endDateMs === 0){

if(startDate === 0){

g_form.addErrorMessage(new GwtMessage().getMessage("{0} is invalid", g_form.getLabelOf("work_start")));

}

if(endDate){

g_form.addErrorMessage(new GwtMessage().getMessage("{0} is invalid", g_form.getLabelOf("work_end")));

}

return false;

}

if(startDateMs >= endDateMs){

g_form.addErrorMessage(new GwtMessage().getMessage("{0} must be after {1}", g_form.getLabelOf("work_end"), g_form.getLabelOf("work_start")));

return false;

}

}

1 ACCEPTED SOLUTION

snehabinani26
Tera Guru

You can also achieve this from BR and set abort action if condition is true.



find_real_file.png



Otherwise on change of planned end date.



function onChange(control, oldValue, newValue, isLoading, isTemplate) {



  if (isLoading || newValue === '')


  {


  return;


  }



  // End Date cannot be in the past


  var ajax = new GlideAjax('ClientDateTimeUtils');


  ajax.addParam('sysparm_name', 'getDateTimeBeforeNowBool');


  ajax.addParam('sysparm_fdt', newValue);


  ajax.getXMLWait();



  if (ajax.getAnswer() == 'true')


  {


  alert(new GwtMessage().getMessage("You have entered an invalid date format or a date in the past. {0} cannot be in the past. Please enter a valid date to continue", g_form.getLabelOf("end_date")));


  g_form.setValue('end_date', '');


  return;


  }




  // End Date cannot be before Planned Start Date


  var startDate = g_form.getValue('start_date');


  if (startDate != "")


  {


  var ajax2 = new GlideAjax('ClientDateTimeUtils');


  ajax2.addParam('sysparm_name', 'getDateTimeDiff');


  ajax2.addParam('sysparm_fdt', startDate);


  ajax2.addParam('sysparm_sdt', newValue);


  ajax2.addParam('sysparm_difftype', 'day');


  ajax2.getXMLWait();



  if (ajax2.getAnswer() <= 0)


  {


  alert(new GwtMessage().getMessage("{0} must be after {1}", g_form.getLabelOf("end_date"), g_form.getLabelOf("start_date")));


  g_form.setValue("end_date", oldValue);


  return;


  }



  }


}




Script include -- Client callable.




var ClientDateTimeUtils = Class.create();  


ClientDateTimeUtils.prototype = Object.extendsObject(AbstractAjaxProcessor, {  


 


//Takes a Single Date/Time Field and returns its time difference from nowDateTime().  


//params = sysparm_fdt (the first date/time field), sysparm_difftype (time based format to return result. See "_calcDateDiff" function comments)  


getNowDateTimeDiff: function(){  


var firstDT = this.getParameter('sysparm_fdt'); //First Date-Time Field  


var diffTYPE = this.getParameter('sysparm_difftype'); // Date-Time Type to return the answer as. Can be second, minute, hour, day  


var diff = gs.dateDiff(gs.nowDateTime(), firstDT, true);  


var timediff = this._calcDateDiff(diffTYPE, diff);  


//return "getNowDateTimeDiff: FIRST DT: " + firstDT + " -DIFFTYPE: " + diffTYPE + " -TIME DIFF: " + timediff;  


return timediff;  


},  


 


//Diff the amount of time between two different Date/Time fields  


//params = sysparm_fdt (the first date/time field), sysparm_sdt (second date/time field), sysparm_difftype (time based format to return result. See "_calcDateDiff" function comments)  


getDateTimeDiff: function(){  


var firstDT = this.getParameter('sysparm_fdt'); //First Date-Time Field  


var secondDT = this.getParameter('sysparm_sdt'); // Second Date-Time Field  


var diffTYPE = this.getParameter('sysparm_difftype'); // Date-Time Type to return the answer as. Can be second, minute, hour, day  


var diff = gs.dateDiff(firstDT, secondDT, true);  


var timediff = this._calcDateDiff(diffTYPE, diff);  


//return "getDateTimeDiff: FIRST DT: " + firstDT + " -SECOND DT: " + secondDT + " -DIFFTYPE: " + diffTYPE + " -TIME DIFF: " + timediff;  


return timediff;  


},  


 


//Takes your date/time field and returns the amount of time before now. A positive is time before now, a negative number is after now.  


//params = sysparm_fdt (the first date/time field), sysparm_difftype (time based format to return result. See "_calcDateDiff" function comments)  


getDateTimeBeforeNow: function(){  


var firstDT = this.getParameter('sysparm_fdt'); //First Date-Time Field  


var diffTYPE = this.getParameter('sysparm_difftype'); // Date-Time Type to return the answer as. Can be second, minute, hour, day  


var diff = gs.dateDiff(firstDT, gs.nowDateTime(), true);  


var timediff = this._calcDateDiff(diffTYPE, diff);  


//return "getDateTimeBeforeNow: FIRST DT: " + firstDT + " -DIFFTYPE: " + diffTYPE + " -TIME DIFF: " + timediff;  


return timediff;  


},  


 


//Returns true if it is before now, and false if it is after now.  


//params = sysparm_fdt (the first date/time field)  


getDateTimeBeforeNowBool: function(){  


var firstDT = this.getParameter('sysparm_fdt'); //First Date-Time Field  


var diff = gs.dateDiff(firstDT, gs.nowDateTime(), true);  


var answer = '';  


if (diff >= 0){answer = 'true';}  


else {answer = 'false';}  


return answer;  


},


  getDateTimeAfterNowBool: function(){


  var firstDT = this.getParameter('sysparm_fdt'); //First Date-Time Field  


var diff = gs.dateDiff(firstDT, gs.nowDateTime(), true);  


var answer = '';  


if (diff <= 0){answer = 'true';}  


else {answer = 'false';}  


return answer;


  },


 


//Returns the Date/Time of right now.  


getNowDateTime: function(){  


var now = gs.nowDateTime(); //Now Date/Time  


return now;  


},  


 


//Returns the Date right now.  


getNowDate: function(){  


var now = GlideDate(); //Now Date  


return now.getLocalDate();  


},  


 


//Returns the Time of right now.  


getNowTime: function(){  


var now = GlideTime(); //Now Time  


var modnow = now.getLocalTime().toString().split(' ');  


return modnow[1];  


},  


 


//Takes a date/time field and adds time to it.  


//params = sysparm_fdt (the first date/time field), sysparm_addtype (type of time to add - second, minute, hour, day, week, month, year), sysparm_addtime (amount of time to add based on the type).  


addDateTimeAmount: function(){  


var firstDT = this.getParameter('sysparm_fdt'); //First Date-Time Field  


var addTYPE = this.getParameter('sysparm_addtype'); //What to add - second (addSeconds()), minute (need to add conversion), hour (need to add conversion), day (addDays()), week (addWeeks()), month (addMonths()), year (addYears())  


var addTIME = this.getParameter('sysparm_addtime'); //How much time to add  


var day = GlideDateTime(firstDT);  


 


if(addTYPE == 'second'){day.addSeconds(addTIME);}  


else if (addTYPE == 'minute'){day.addSeconds(addTIME*60);}  


else if (addTYPE == 'hour'){day.addSeconds(addTIME*(60*60));}  


else if (addTYPE == 'day'){day.addDays(addTIME);}  


else if (addTYPE == 'week'){day.addWeeks(addTIME);}  


else if (addTYPE == 'month'){day.addMonths(addTIME);}  


else if (addTYPE == 'year'){day.addYears(addTIME);}  


else {day.addDays(addTIME);}  


 


//return "First Date: " + firstDT + " -Time to Add: " + addTIME + " -Add Type: " + addTYPE + " -Added Time: " + day;  


return day;  


},  


 


//Takes a glide date field and adds time to it.  


//params = sysparm_fdt (the first date/time field), sysparm_addtype (type of time to add - day, week, month, year),sysparm_addtime (amount of time to add based on the type).  


addDateAmount: function(){  


var firstDT = this.getParameter('sysparm_fdt'); //First Date Field  


var addTYPE = this.getParameter('sysparm_addtype'); //What to add - day (addDays()), week (addWeeks()), month (addMonths()), year (addYears())  


var addTIME = this.getParameter('sysparm_addtime'); //How much time to add  


var day = GlideDate();  


day.setValue(firstDT);  


 


if(addTYPE == 'day'){day.addDays(addTIME);}  


else if (addTYPE == 'week'){day.addWeeks(addTIME);}  


else if (addTYPE == 'month'){day.addMonths(addTIME);}  


else if (addTYPE == 'year'){day.addYears(addTIME);}  


else {day.addDays(addTIME);}  


 


//return "First Date: " + firstDT + " -Time to Add: " + addTIME + " -Add Type: " + addTYPE + " -Added Time: " + day;  


return day;  


},  


 


addTimeAmount: function(){  


var firstDT = this.getParameter('sysparm_fdt'); //First Date-Time Field  


var addTYPE = this.getParameter('sysparm_addtype'); //What  


var addTIME = this.getParameter('sysparm_addtime'); //How much time to add  


var time = GlideTime();  


time.setValue(firstDT);  


 


if(addTYPE == 'second'){time.addSeconds(addTIME);}  


else if (addTYPE == 'minute'){time.addSeconds(addTIME*60);}  


else if (addTYPE == 'hour'){time.addSeconds(addTIME*(60*60));}  


else {time.addSeconds(addTIME);}  


 


var modtime = time.toString().split(' ');  


//return "First Date: " + firstDT + " -Time to Add: " + addTIME + " -Add Type: " + addTYPE + " -Added Time: " + time;  


return modtime[1];  


},  


 


//Private function to calculate the date difference return result in second, minute, hour, day.  


_calcDateDiff: function(diffTYPE, seconds){  


var thisdiff;  


if (diffTYPE == "day"){thisdiff = seconds/86400;}  


else if (diffTYPE == "hour"){thisdiff = seconds/3600;}  


else if (diffTYPE == "minute"){thisdiff = seconds/60;}  


else if (diffTYPE == "second"){thisdiff = seconds;}  


else {thisdiff = seconds;}  


return thisdiff;  


}  


 


 


});  




Hope this helps you


View solution in original post

3 REPLIES 3

snehabinani26
Tera Guru

You can also achieve this from BR and set abort action if condition is true.



find_real_file.png



Otherwise on change of planned end date.



function onChange(control, oldValue, newValue, isLoading, isTemplate) {



  if (isLoading || newValue === '')


  {


  return;


  }



  // End Date cannot be in the past


  var ajax = new GlideAjax('ClientDateTimeUtils');


  ajax.addParam('sysparm_name', 'getDateTimeBeforeNowBool');


  ajax.addParam('sysparm_fdt', newValue);


  ajax.getXMLWait();



  if (ajax.getAnswer() == 'true')


  {


  alert(new GwtMessage().getMessage("You have entered an invalid date format or a date in the past. {0} cannot be in the past. Please enter a valid date to continue", g_form.getLabelOf("end_date")));


  g_form.setValue('end_date', '');


  return;


  }




  // End Date cannot be before Planned Start Date


  var startDate = g_form.getValue('start_date');


  if (startDate != "")


  {


  var ajax2 = new GlideAjax('ClientDateTimeUtils');


  ajax2.addParam('sysparm_name', 'getDateTimeDiff');


  ajax2.addParam('sysparm_fdt', startDate);


  ajax2.addParam('sysparm_sdt', newValue);


  ajax2.addParam('sysparm_difftype', 'day');


  ajax2.getXMLWait();



  if (ajax2.getAnswer() <= 0)


  {


  alert(new GwtMessage().getMessage("{0} must be after {1}", g_form.getLabelOf("end_date"), g_form.getLabelOf("start_date")));


  g_form.setValue("end_date", oldValue);


  return;


  }



  }


}




Script include -- Client callable.




var ClientDateTimeUtils = Class.create();  


ClientDateTimeUtils.prototype = Object.extendsObject(AbstractAjaxProcessor, {  


 


//Takes a Single Date/Time Field and returns its time difference from nowDateTime().  


//params = sysparm_fdt (the first date/time field), sysparm_difftype (time based format to return result. See "_calcDateDiff" function comments)  


getNowDateTimeDiff: function(){  


var firstDT = this.getParameter('sysparm_fdt'); //First Date-Time Field  


var diffTYPE = this.getParameter('sysparm_difftype'); // Date-Time Type to return the answer as. Can be second, minute, hour, day  


var diff = gs.dateDiff(gs.nowDateTime(), firstDT, true);  


var timediff = this._calcDateDiff(diffTYPE, diff);  


//return "getNowDateTimeDiff: FIRST DT: " + firstDT + " -DIFFTYPE: " + diffTYPE + " -TIME DIFF: " + timediff;  


return timediff;  


},  


 


//Diff the amount of time between two different Date/Time fields  


//params = sysparm_fdt (the first date/time field), sysparm_sdt (second date/time field), sysparm_difftype (time based format to return result. See "_calcDateDiff" function comments)  


getDateTimeDiff: function(){  


var firstDT = this.getParameter('sysparm_fdt'); //First Date-Time Field  


var secondDT = this.getParameter('sysparm_sdt'); // Second Date-Time Field  


var diffTYPE = this.getParameter('sysparm_difftype'); // Date-Time Type to return the answer as. Can be second, minute, hour, day  


var diff = gs.dateDiff(firstDT, secondDT, true);  


var timediff = this._calcDateDiff(diffTYPE, diff);  


//return "getDateTimeDiff: FIRST DT: " + firstDT + " -SECOND DT: " + secondDT + " -DIFFTYPE: " + diffTYPE + " -TIME DIFF: " + timediff;  


return timediff;  


},  


 


//Takes your date/time field and returns the amount of time before now. A positive is time before now, a negative number is after now.  


//params = sysparm_fdt (the first date/time field), sysparm_difftype (time based format to return result. See "_calcDateDiff" function comments)  


getDateTimeBeforeNow: function(){  


var firstDT = this.getParameter('sysparm_fdt'); //First Date-Time Field  


var diffTYPE = this.getParameter('sysparm_difftype'); // Date-Time Type to return the answer as. Can be second, minute, hour, day  


var diff = gs.dateDiff(firstDT, gs.nowDateTime(), true);  


var timediff = this._calcDateDiff(diffTYPE, diff);  


//return "getDateTimeBeforeNow: FIRST DT: " + firstDT + " -DIFFTYPE: " + diffTYPE + " -TIME DIFF: " + timediff;  


return timediff;  


},  


 


//Returns true if it is before now, and false if it is after now.  


//params = sysparm_fdt (the first date/time field)  


getDateTimeBeforeNowBool: function(){  


var firstDT = this.getParameter('sysparm_fdt'); //First Date-Time Field  


var diff = gs.dateDiff(firstDT, gs.nowDateTime(), true);  


var answer = '';  


if (diff >= 0){answer = 'true';}  


else {answer = 'false';}  


return answer;  


},


  getDateTimeAfterNowBool: function(){


  var firstDT = this.getParameter('sysparm_fdt'); //First Date-Time Field  


var diff = gs.dateDiff(firstDT, gs.nowDateTime(), true);  


var answer = '';  


if (diff <= 0){answer = 'true';}  


else {answer = 'false';}  


return answer;


  },


 


//Returns the Date/Time of right now.  


getNowDateTime: function(){  


var now = gs.nowDateTime(); //Now Date/Time  


return now;  


},  


 


//Returns the Date right now.  


getNowDate: function(){  


var now = GlideDate(); //Now Date  


return now.getLocalDate();  


},  


 


//Returns the Time of right now.  


getNowTime: function(){  


var now = GlideTime(); //Now Time  


var modnow = now.getLocalTime().toString().split(' ');  


return modnow[1];  


},  


 


//Takes a date/time field and adds time to it.  


//params = sysparm_fdt (the first date/time field), sysparm_addtype (type of time to add - second, minute, hour, day, week, month, year), sysparm_addtime (amount of time to add based on the type).  


addDateTimeAmount: function(){  


var firstDT = this.getParameter('sysparm_fdt'); //First Date-Time Field  


var addTYPE = this.getParameter('sysparm_addtype'); //What to add - second (addSeconds()), minute (need to add conversion), hour (need to add conversion), day (addDays()), week (addWeeks()), month (addMonths()), year (addYears())  


var addTIME = this.getParameter('sysparm_addtime'); //How much time to add  


var day = GlideDateTime(firstDT);  


 


if(addTYPE == 'second'){day.addSeconds(addTIME);}  


else if (addTYPE == 'minute'){day.addSeconds(addTIME*60);}  


else if (addTYPE == 'hour'){day.addSeconds(addTIME*(60*60));}  


else if (addTYPE == 'day'){day.addDays(addTIME);}  


else if (addTYPE == 'week'){day.addWeeks(addTIME);}  


else if (addTYPE == 'month'){day.addMonths(addTIME);}  


else if (addTYPE == 'year'){day.addYears(addTIME);}  


else {day.addDays(addTIME);}  


 


//return "First Date: " + firstDT + " -Time to Add: " + addTIME + " -Add Type: " + addTYPE + " -Added Time: " + day;  


return day;  


},  


 


//Takes a glide date field and adds time to it.  


//params = sysparm_fdt (the first date/time field), sysparm_addtype (type of time to add - day, week, month, year),sysparm_addtime (amount of time to add based on the type).  


addDateAmount: function(){  


var firstDT = this.getParameter('sysparm_fdt'); //First Date Field  


var addTYPE = this.getParameter('sysparm_addtype'); //What to add - day (addDays()), week (addWeeks()), month (addMonths()), year (addYears())  


var addTIME = this.getParameter('sysparm_addtime'); //How much time to add  


var day = GlideDate();  


day.setValue(firstDT);  


 


if(addTYPE == 'day'){day.addDays(addTIME);}  


else if (addTYPE == 'week'){day.addWeeks(addTIME);}  


else if (addTYPE == 'month'){day.addMonths(addTIME);}  


else if (addTYPE == 'year'){day.addYears(addTIME);}  


else {day.addDays(addTIME);}  


 


//return "First Date: " + firstDT + " -Time to Add: " + addTIME + " -Add Type: " + addTYPE + " -Added Time: " + day;  


return day;  


},  


 


addTimeAmount: function(){  


var firstDT = this.getParameter('sysparm_fdt'); //First Date-Time Field  


var addTYPE = this.getParameter('sysparm_addtype'); //What  


var addTIME = this.getParameter('sysparm_addtime'); //How much time to add  


var time = GlideTime();  


time.setValue(firstDT);  


 


if(addTYPE == 'second'){time.addSeconds(addTIME);}  


else if (addTYPE == 'minute'){time.addSeconds(addTIME*60);}  


else if (addTYPE == 'hour'){time.addSeconds(addTIME*(60*60));}  


else {time.addSeconds(addTIME);}  


 


var modtime = time.toString().split(' ');  


//return "First Date: " + firstDT + " -Time to Add: " + addTIME + " -Add Type: " + addTYPE + " -Added Time: " + time;  


return modtime[1];  


},  


 


//Private function to calculate the date difference return result in second, minute, hour, day.  


_calcDateDiff: function(diffTYPE, seconds){  


var thisdiff;  


if (diffTYPE == "day"){thisdiff = seconds/86400;}  


else if (diffTYPE == "hour"){thisdiff = seconds/3600;}  


else if (diffTYPE == "minute"){thisdiff = seconds/60;}  


else if (diffTYPE == "second"){thisdiff = seconds;}  


else {thisdiff = seconds;}  


return thisdiff;  


}  


 


 


});  




Hope this helps you


Sneha,



Thank you soo much for taking the time out to write both scripts up for me,



Just awesome !!



Chris


This is amazing! Very useful script!

I get the error message that end date needs to be after start date, even though the dates are correct? What might I be doing wrong?