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

Hi,

it should ideally work

What debugging did you perform?

Regards
Ankur

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

@Ankur Bawiskar If I give future date also still I am getting the error as 'start date must not be in past'. Tried printing value of nowTime in alert message but getting some random number in the value.

 

I tried below in background script as well, still returning 

*** Script: 1653975764645

var nowTime = new Date().getTime();
gs.info(nowTime);

Hi,

share alert for this and check what time it shows for now time and start

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();

    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

Please find the screenshots below,

 

find_real_file.pngfind_real_file.png

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