- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
05-26-2022 03:17 AM
Hello,
I have done date validations for delegate start and end date, but these validations are working perfectly for only few date format and not others.
Date format not supported:
dd/MM/yyyy
dd-MM-yyyy
dd.MM.yyyy
Date format supported:
System yyyy-MM-dd
MM-dd-yyyy
yyyy-MM-dd
Onchange Client Script:
function onChange(control, oldValue, newValue, isLoading, isTemplate) {
if (isLoading || newValue === '') {
return;
}
var strt_date=g_form.getValue("starts");
var end_date=g_form.getValue("ends");
var ga = new GlideAjax('DelegateValidate');
ga.addParam('sysparm_name', 'checkStrtDate');
ga.addParam('sysparm_start', strt_date);
ga.addParam('sysparm_end', end_date);
ga.getXML(doSomething);
function doSomething(response){
var answer = response.responseXML.documentElement.getAttribute("answer");
if (ga.getAnswer() == 'false') {
alert("Start Date must not be after End Date");
g_form.setValue('starts','');
return false;
}
else if (ga.getAnswer() == 'true') {
alert("Start must be future date");
g_form.setValue('starts','');
return false;
}
}
}
Script Include:
var DelegateValidate = Class.create();
DelegateValidate.prototype = Object.extendsObject(AbstractAjaxProcessor, {
checkEndDate: function(current) {
var start = new GlideDateTime(this.getParameter('sysparm_start'));
var end = new GlideDateTime(this.getParameter('sysparm_end'));
var nowTime = new GlideDateTime();
if (start != "" && end <= start) {
// if(end.compareTo(start) == -1){
return false;
} else if (end < nowTime.getDisplayValue())
//else if (end.compareTo(nowTime) == -1)
{
return true;
}
},
checkStrtDate: function(current) {
var start = (new GlideDateTime(this.getParameter('sysparm_start')));
gs.addInfoMessage(start);
var end = (new GlideDateTime(this.getParameter('sysparm_end')));
var nowTime = new GlideDateTime();
if (end != "" && end < start) {
// if( (end!='') && (end.compareTo(start) == -1)){
return false;
} else if (start < nowTime.getDisplayValue())
//else if (start.compareTo(nowTime) == -1)
{
return true;
}
},
currentDateTime: function() {
var nowTime = new GlideDateTime();
return nowTime.getDisplayValue();
},
type: 'DelegateValidate'
});
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
05-31-2022 12:12 AM
Hi,
those are date/time type and not date
so update script as this
function onChange(control, oldValue, newValue, isLoading, isTemplate) {
if (isLoading || newValue === '') {
return;
}
var strt_date = g_form.getValue("starts");
var end_date = g_form.getValue("ends");
var start = new Date(getDateFromFormat(strt_date, g_user_date_time_format)).getTime();
var end = new Date(getDateFromFormat(end_date, g_user_date_time_format)).getTime();
var nowTime = new Date().getTime();
alert('nowTime' + nowTime);
alert('start' + start);
if(start < nowTime){
alert("Start Date must not be in past");
g_form.clearValue('starts');
}
else if(end < start){
alert("Start Date must not be after End Date");
g_form.clearValue('starts');
}
}
Regards
Ankur
Ankur
✨ Certified Technical Architect || ✨ 9x ServiceNow MVP || ✨ ServiceNow Community Leader
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
05-26-2022 03:24 AM
Hi,
I believe you want to check if End date > Start Date
don't use glideAjax but use this and it should handle the date format part
Client Side Dates in ServiceNow
function onChange(control, oldValue, newValue, isLoading, isTemplate) {
if (isLoading || newValue === '') {
return;
}
var strt_date = g_form.getValue("starts");
var end_date = g_form.getValue("ends");
var start = new Date(getDateFromFormat(strt_date, g_user_date_format)).getTime();
var end = new Date(getDateFromFormat(end_date, g_user_date_format)).getTime();
if(end < start){
alert("Start Date must not be after End Date");
g_form.clearValue('starts');
}
}
Regards
Ankur
Ankur
✨ Certified Technical Architect || ✨ 9x ServiceNow MVP || ✨ ServiceNow Community Leader
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
05-30-2022 04:40 AM
Need to validate for past time as well, should not accept past time, how to get current date time in client scripts?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
05-30-2022 04:42 AM
like this
function onChange(control, oldValue, newValue, isLoading, isTemplate) {
if (isLoading || newValue === '') {
return;
}
var strt_date = g_form.getValue("starts");
var end_date = g_form.getValue("ends");
var start = new Date(getDateFromFormat(strt_date, g_user_date_format)).getTime();
var end = new Date(getDateFromFormat(end_date, g_user_date_format)).getTime();
var nowTime = new Date().getTime();
if(start < nowTime){
alert("Start Date must not be in past");
g_form.clearValue('starts');
}
else if(end < start){
alert("Start Date must not be after End Date");
g_form.clearValue('starts');
}
}
Regards
Ankur
Ankur
✨ Certified Technical Architect || ✨ 9x ServiceNow MVP || ✨ ServiceNow Community Leader
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
05-30-2022 05:39 AM