Date Validations - Date Format

dharani2607
Tera Contributor

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'
});

1 ACCEPTED SOLUTION

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

Regards,
Ankur
Certified Technical Architect  ||  9x ServiceNow MVP  ||  ServiceNow Community Leader

View solution in original post

11 REPLIES 11

Ankur Bawiskar
Tera Patron
Tera Patron

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

Regards,
Ankur
Certified Technical Architect  ||  9x ServiceNow MVP  ||  ServiceNow Community Leader

Need to validate for past time as well, should not accept past time, how to get current date time in client scripts?

@dharani2607 

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

Regards,
Ankur
Certified Technical Architect  ||  9x ServiceNow MVP  ||  ServiceNow Community Leader

If I give future date also I am still getting the error 

alert("Start Date must not be in past");

Tried checking the value of nowTime in alert, but got below value.

find_real_file.png