Adding and setting date field on client side
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
05-17-2017 12:25 PM
From the client side, I am trying to autopopulate an end date field after the start date field has been entered.
Here is my current code:
Catalog Client Script - OnChange - StartDate |
---|
function onChange(control, oldValue, newValue, isLoading) { if (isLoading || newValue == '') { return; } var str_start = g_form.getValue('start_datetime'); var dt_start = new Date(str_start); var addDays = 30; var dt_end = new Date(str_start); dt_end.setDate(dt_end.getDate() + addDays); var month = "" + (dt_end.getMonth() + 1); //Not sure why I need to add 1 but I do for some reason. is January month zero?? if(month.length < 2){ month = '0' + month; } var day = "" + dt_end.getDate(); if(day.length < 2){ day = '0' + day; } var year = dt_end.getFullYear(); g_form.setValue('end_datetime', year + "-" + month + "-" + day); } |
This works fine when the current user's ServiceNow profile is set to yyyy-mm-dd, but not if it is any other date format.
Could anyone offer any suggestions?
Thanks!
- James

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
05-17-2017 01:33 PM
I took pieces from my own script include that should get the dates you need. Here is the script include:
var dateTimeUtilAjax = Class.create();
dateTimeUtilAjax.prototype = Object.extendsObject(global.AbstractAjaxProcessor, {
getNowAdd: function() {
var firstDT = this.getParameter('sysparm_fdt');
var lookVar = this.getParameter('sysparm_add');
var dFmt = this.getParameter('sysparm_fmt');
if (!dFmt) {
dFmt = this._getDateFormat();
}
var fstDT = '';
if (firstDT) {
fstDT = this._makeDateTimeStr(firstDT, dFmt);
} else {
fstDT = this._makeDateTimeStr(gs.nowDateTime(), dFmt);
}
var conDT = this._addLookAhead(fstDT, lookVar);
return this._setDateTime(conDT, 'toUser', dFmt);
},
_addLookAhead: function(dateTime, lookVar, pad) {
var addTYPE = lookVar.split('-')[0];
addTYPE = addTYPE.toLowerCase();
var addTIME = lookVar.split('-')[1];
if (lookVar.split('-')[2] == 'before') {
addTIME = '-' + addTIME;
}
var result = new GlideDateTime(dateTime);
if (pad) {result.addSeconds(pad);}
if (addTYPE == 'min') {result.addSeconds(addTIME * 60);}
if (addTYPE == 'hr') {result.addSeconds(addTIME * (60 * 60));}
if (addTYPE == 'day') {result.addDays(addTIME);}
if (addTYPE == 'wk') {result.addWeeks(addTIME);}
if (addTYPE == 'mo') {result.addMonths(addTIME);}
if (addTYPE == 'yr') {result.addYears(addTIME);}
return result;
},
_getDateFormat: function() {
var usr = new GlideRecord('sys_user');
usr.get(gs.getUserID());
var usr_date = usr.date_format;
var sys_date = gs.getProperty('glide.sys.date_format');
var result = '';
if (!usr_date) {
result = sys_date;
} else {
result = usr_date;
}
return result;
},
_getTzFormat: function() {
var usr = new GlideRecord('sys_user');
usr.get(gs.getUserID());
var usr_zone = usr.time_zone;
var sys_zone = gs.getProperty('glide.sys.default.tz');
var result = '';
if (!usr_zone) {
result = sys_zone;
} else {
result = usr_zone;
}
return result;
},
_makeDateTimeStr: function(dateTime, dFmt) {
if (!dFmt) {
dFmt = this._getDateFormat();
}
var nowDT = new GlideDateTime();
var nowT = nowDT.toString().split(' ')[1];
var nowH = nowT.split(':')[0];
var nowM = nowT.split(':')[1];
var chkDT = dateTime;
var oDate = dateTime.split(' ')[0];
var tChk = dateTime.split(' ')[1];
if (typeof tChk == 'undefined') {
chkDT = oDate + ' ' + nowT;
} else {
var hChk = tChk.split(':')[0];
var mChk = tChk.split(':')[1];
if (typeof mChk == 'undefined') {
chkDT = oDate + ' ' + hChk + ':' + nowM + ':00';
} else {
var sChk = tChk.split(':')[2];
if (typeof sChk == 'undefined') {
chkDT = oDate + ' ' + hChk + ':' + mChk + ':00';
}
}
}
return this._setDateTime(chkDT, 'toGlide', dFmt);
},
_setDateTime: function(dateTime, type, dFmt, tFmt) {
if (!dFmt) {
dFmt = this._getDateFormat();
}
if (!tFmt) {
tFmt = this._getTimeFormat();
}
var inputFmt = dFmt + ' ' + tFmt;
var inputTz = this._getTzFormat();
if (type == 'toUser') {
inputFmt = 'yyyy-MM-dd HH:mm:ss';
inputTz = 'GMT';
}
var input = new Packages.java.text.SimpleDateFormat(inputFmt);
var tzI = new Packages.java.util.TimeZone.getTimeZone(inputTz);
input.setTimeZone(tzI);
dateTime = input.parse(dateTime);
outputFmt = dFmt + ' ' + tFmt;
var outputTz = this._getTzFormat();
if (type == 'toGlide') {
outputFmt = 'yyyy-MM-dd HH:mm:ss';
outputTz = 'GMT';
}
var output = new Packages.java.text.SimpleDateFormat(outputFmt);
var tzO = new Packages.java.util.TimeZone.getTimeZone(outputTz);
output.setTimeZone(tzO);
return output.format(dateTime);
},
type: 'dateTimeUtilAjax'
});
Here is the Catalog Client Script:
function onChange(control, oldValue, newValue, isLoading) {
if (isLoading || newValue == '') {
return;
}
if (newValue != oldValue) {
var evalDate = newValue;
var ga = new GlideAjax('dateTimeUtilAjax');
ga.addParam('sysparm_name', 'getNowAdd');
ga.addParam('sysparm_fdt', evalDate);
ga.addParam('sysparm_add', 'day-30');
ga.addParam('sysparm_fmt', 'g_user_date_format');
ga.getXML(setDate);
}
}
function setDate(response) {
var answer = response.responseXML.documentElement.getAttribute("answer");
g_form.setValue('end_datetime', answer);
}
Hopefully I got all of the pieces and adjusted to match your variables you use.
Let me know if you have any questions on what each of the functions do.

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
05-17-2017 09:01 PM