Need to Get the day based on entered date & time

is_12
Tera Contributor

Hi Community,

 

On the Catalog form I have field start & end date.

 

Based on the start date need to get the day

 And also based on the start date, need to get the next 3months & 6months & 12months date

 

Can anyone help me with this

 

Thanks,

 

1 ACCEPTED SOLUTION

Ankur Bawiskar
Tera Patron
Tera Patron

@is_12 

try this and it will take care of any date/time format

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

    // Parse string to milliseconds
    var dateMS = getDateFromFormat(newValue, g_user_date_time_format);
    var newDT = new Date();
    newDT.setTime(dateMS);

    // Example: Add 3 months
    newDT.setMonth(newDT.getMonth() + 3);

    // If you want 6 or 12 months, just change the +3:
    // newDT.setMonth(newDT.getMonth() + 6); // For 6 months
    // newDT.setMonth(newDT.getMonth() + 12); // For 12 months

    var val = formatDate(newDT, g_user_date_time_format);
    alert(val);
}

Output:I added 3 months, enhance further

AnkurBawiskar_1-1761291386161.png

 

💡 If my response helped, please mark it as correct and close the thread 🔒— this helps future readers find the solution faster! 🙏

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

View solution in original post

17 REPLIES 17

@svirkar420 

are you sure the above script will work fine in client script?

Could you please share a working example?

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

svirkar420
Tera Guru

Hi there @is_12 , Here is the script it should work for all date and time formats regardless of any region.

Script - 

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

var gdt = new GlideDateTime();
gdt.setDisplayValue(newValue);

var dayOfWeek = getDayName(gdt);

var date3 = new GlideDateTime(gdt);
date3.addMonthsLocalTime(3);

var date6 = new GlideDateTime(gdt);
date6.addMonthsLocalTime(6);

var date12 = new GlideDateTime(gdt);
date12.addMonthsLocalTime(12);

g_form.setValue('day_of_week', dayOfWeek);
g_form.setValue('next_3_months', date3.getDisplayValue());
g_form.setValue('next_6_months', date6.getDisplayValue());
g_form.setValue('next_12_months', date12.getDisplayValue());
}

function getDayName(gdt) {
var jsDate = new Date(gdt.getNumericValue());
var days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
return days[jsDate.getDay()];
}

 

If this answer helps you in any way make sure to Mark this as accepted solution and give a thumbs up this will also benefit others as well.
Regards.
Saurabh V.

Ankur Bawiskar
Tera Patron
Tera Patron

@is_12 

try this and it will take care of any date/time format

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

    // Parse string to milliseconds
    var dateMS = getDateFromFormat(newValue, g_user_date_time_format);
    var newDT = new Date();
    newDT.setTime(dateMS);

    // Example: Add 3 months
    newDT.setMonth(newDT.getMonth() + 3);

    // If you want 6 or 12 months, just change the +3:
    // newDT.setMonth(newDT.getMonth() + 6); // For 6 months
    // newDT.setMonth(newDT.getMonth() + 12); // For 12 months

    var val = formatDate(newDT, g_user_date_time_format);
    alert(val);
}

Output:I added 3 months, enhance further

AnkurBawiskar_1-1761291386161.png

 

💡 If my response helped, please mark it as correct and close the thread 🔒— this helps future readers find the solution faster! 🙏

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

@is_12 

Hope you are doing good.

Did my reply answer your question?

💡 If my response helped, please mark it as correct and close the thread 🔒— this helps future readers find the solution faster! 🙏

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

@Ankur Bawiskar, Thanks for your solution,

 

There is a small change instead of start date + 3months, based on selected "start date" we have day of month that is nothing but date based on that it should be +3 or +6

Below is the reference

is_12_0-1761308655015.png

 

Tried with this below script 

Client script

var dateMS = getDateFromFormat(newValue, g_user_date_time_format);
    var newDT = new Date();
    newDT.setTime(dateMS);
    //alert("8"+dateMS);
    // Example: Add 3 months



    var ga = new GlideAjax('BT_CSR_SSR_CatalogUtils');
    ga.addParam('sysparm_name', 'calDate');
    ga.addParam('sysparm_date', g_form.getValue('start_date'));
    ga.addParam('sysparm_dayofmonth',g_form.getValue('run_dayofmonth'));
    ga.getXML(check);

    function check(response) {
        var answer = response.responseXML.documentElement.getAttribute("answer");
        alert("22"+answer);
        var ansParsed = JSON.parse(answer);
         var gg = g_form.setValue('day_1', ansParsed);


    }

    var monthly = g_form.getValue('select_month');
    if (monthly == 'Every Month') {
        alert("12");
        newDT.setMonth(newDT.getMonth() + 1);
        var val = formatDate(newDT, g_user_date_time_format);
        g_form.setValue('day_1', val);
        alert("Monthly" + val);

}

script include

    calDate: function() {
        var sdt = new GlideDateTime(this.getParameter('sysparm_date'));
        sdt.addDaysLocalTime(this.getParameter('sysparm_dayofmonth'));
        return sdt.getDate();
    },
but getting javascript error
 
Thanks,