Client Script - getting date value

Rob Sestito
Mega Sage

Hey there SN Comm,

Looking for some help with a client script please.

Requirement:
Date field called 'Deadline' - When entered/changed, I need another field called 'Timing', to display certain choices:

If Deadline = today (timing = "overdue")

If Deadline =  in the future but less than 180 days from current system date, (timing = “Deadline Approaching”)

If Deadline = in the future but <= 12/31 of the current year, (timing = “This Year”)

If Deadline = in the future but > 12/31 of the current year, (timing = “Future”)

 

I tried creating a test client script so far to get me going, but I get Timing = "Undefined" in the field.

function onChange(control, oldValue, newValue, isLoading, isTemplate) {
	if (isLoading || newValue === '') {
		return;
	}
	
	var theDeadline = g_form.getValue('u_deadline');
	var theTiming;
	var reqDate = new Date(getDateFromFormat(newValue, g_user_date_format));
	var today = new Date();
	
	if (today == theDeadline) {
		theTiming = "Overdue";
	}
	
	g_form.setValue('u_timing', theTiming);
}

Anyone able to help?

John Feist - want to take another stab at more client scripts with me? LOL

Cheers!

-Rob

1 ACCEPTED SOLUTION

Rob Sestito
Mega Sage

I was able to figure out what I needed in order to make this work how I now want it too.

Adding my code in here in case it helps anyone. Making this as correct to close the post.

Thanks all!

-Rob

function onChange(control, oldValue, newValue, isLoading, isTemplate) {
	
	var theTiming;
	var today = new Date();
	
	//get the entered date string
	var dtstring = g_form.getValue('u_deadline');
		
	//convert entered date to Date object
	var dateToCheck = new Date(dtstring);
	
	var approaching = new Date();
	approaching.setDate(today.getDate() + 179);
	
	//Compare the two numbers
	if (dateToCheck < today || dateToCheck == today) {
		theTiming = "Overdue";
		g_form.setValue('u_timing', theTiming);
	}
	else if (dateToCheck <= approaching) {
		theTiming = "Within 6 Months";
		g_form.setValue('u_timing', theTiming);
	}
	else if (dateToCheck > approaching) {
		theTiming = "6+ Months";
		g_form.setValue('u_timing', theTiming);
	}
	
	else {
		theTiming = "Where did that Date come from?";
		g_form.setValue('u_timing, theTiming');
	}
}

View solution in original post

7 REPLIES 7

Prateek kumar
Mega Sage

You would have to convert var today = new Date(); and do your Math

https://www.servicenowguru.com/scripting/client-scripts-scripting/client-side-dates-in-servicenow/


Please mark my response as correct and helpful if it helped solved your question.
-Thanks

Thanks for the reply Prateek!

Now, I just need to know how to do that actual math part (which I am not a full on coder yet) - so this is going to require some research.

Cheers!

-Rob

Rob Sestito
Mega Sage

Is anyone able to help me configure script to do the following:

If Deadline (value form) is in the future but <= 12/31 of the current year, “This Year”

If Deadline (value form) is in the future but > 12/31 of the current year, “Future”

 

I am having a tough time figuring this out in order to script correctly.

Thank you!

-Rob

//Try this.partially tested on PDI. needs more testing

 

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

//Type appropriate comment here, and begin script below
if (isLoading || newValue === '') {
return;
}

var theTiming;

var theDeadline = new Date(getDateFromFormat(g_form.getValue('u_deadline'), g_user_date_time_format));
var reqDate = new Date(getDateFromFormat(newValue, g_user_date_time_format));
var today = new Date();
var yearEnd = new Date(new Date().getFullYear(), 11, 31);

if (Number(theDeadline) == Number(today)) {
theTiming = "Overdue";
}
if (Number(theDeadline) > Number(today)) {
theTiming = "Future date";
if(Number(theDeadline) < Number(yearEnd))
{
theTiming = "This year";
}
else
{
theTiming = "Future";
}

}
if (Number(theDeadline) < Number(today)) {
theTiming = "Back date";
}
console.log("theTiming = " + theTiming);

}

 

 

Please mark Correct and click the Thumb up if my answer helps you resolve your issue. Thanks!
Vinod Kumar Kachineni
Community Rising Star 2022