How to restrict DATE field range upto 12 months from Current Date

chanikya
Kilo Sage

Hi

 

this script is working in ITIL view, not working in Portal

Onchange: expiry    UI type:All

var date=new Date(getDateFromFormat(g_form.getValue('expiry'), g_user_date_format));
var future_date=new Date(new Date().getTime() + 60*24*365*60000);
if(date>future_date){ 
g_form.showFieldMsg('expiry','Maximum allowed is 12 months from current date','error');
 alert('Maximum allowed is 12 months from current date');

g_form.clearValue('expiry');

 

find_real_file.png

1 ACCEPTED SOLUTION

Srikanth Suri1
Kilo Expert

Hi Chanikya,

 

Please find script below:

 

Script include:

Name: ClientDateTimeUtils

Check = 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;
},

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


});

 

Glide AJAx OnChange:

 

function onChange(control, oldValue, newValue, isLoading) {
if (isLoading || newValue == '') {
return;
}

//Type appropriate comment here, and begin script below
g_form.hideFieldMsg('field-name');
var onlyDate = g_form.getValue('variables.field_name');

var today = new Date();
try {
//alert('diff');
var ga = new GlideAjax('ClientDateTimeUtils'); || if you are working in scoped application use :: var ga = new GlideAjax('global.ClientDateTimeUtils')
ga.addParam('sysparm_name', 'getDateTimeDiff');
ga.addParam('sysparm_fdt', today);
ga.addParam('sysparm_sdt', newValue);
ga.addParam('sysparm_difftype', 'day');
ga.getXML(RESPONSE);
//alert('diff time');
}
catch(err){
alert("Error detected Client Script: UP3 - Insufficient time warning > " + err);
}
// alert('catch');
}
function RESPONSE(response) {
//alert('callback function');
var answer = response.responseXML.documentElement.getAttribute("answer");



if(answer > 365){
alert("Whoops! event cannot be pre-scheduled or initiated with a future date if a future date has been selected in the date fields.");


g_form.setValue('field_name ', '');
return false;
}
}

Regards,

Srikanth Suri

View solution in original post

11 REPLIES 11

Hi Chanikya,

 

Yes you can use all script include and client script as well....

It will work portal and form as well...

 

Regards,

Srikanth Suri

this is the script i have used.... it is working now...........

scriptinclude:

var ClientDateTimeUtils = Class.create();
ClientDateTimeUtils .prototype = Object.extendsObject(AbstractAjaxProcessor, {

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;
},

//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;
} ,

type: 'ClientDateTimeUtils '
});

 

Onchange:

function onChange(control, oldValue, newValue, isLoading) {
if (isLoading || newValue == '') {
return;
}

g_form.hideFieldMsg('v_date');
var onlyDate = g_form.getValue('variables.v_date');

var today = new Date();
try
{
var ga = new GlideAjax('global.ClientDateTimeUtils');
ga.addParam('sysparm_name', 'getDateTimeDiff');
ga.addParam('sysparm_fdt', today);
ga.addParam('sysparm_sdt', newValue);
ga.addParam('sysparm_difftype', 'day');
ga.getXML(RESPONSE);

}
catch(err)
{
alert("Error detected Client Script: UP3 - Insufficient time warning > " + err);
}

      function RESPONSE(response)
     {
         var answer = response.responseXML.documentElement.getAttribute("answer");
                 if(answer > 365)
                 {
                g_form.showFieldMsg('v_date','Maximum allowed is 12 months from current date','error');
              alert("Maximum allowed is 12 months from current date.");

             g_form.clearValue('v_date');
            return false;
                }
      }
}

That's cool.

 

 

Hello Chanikya,

                 If i want don't want to allow current date to below 30 days 

                                    help Me with that, Thanks in Advance.

 

Regards,

Dinesh Kumar.

 if(answer > 365)
                 {
                g_form.showFieldMsg('v_date','Maximum allowed is 12 months from current date','error');
              alert("Maximum allowed is 12 months from current date.");

             g_form.clearValue('v_date');
            return false;
                }

 

 

field error message is showing in Portal view, not displaying in ITIL view

Portal:

find_real_file.png

 

 

ITIL VIEW:

find_real_file.png