Why does GlideDateTime field not setting properly (sets the correct date but the time is set differently) using setGlideDateTime?

NYoks1
Giga Expert

/* SCRIPT */

var gr = new GlideRecord('u_xyzTable');

gr.get('4d967a180fe70200b8de46a32050e20');

gs.print('u_a_date : ' + gr.u_a_date);

var newDateValue = new GlideDateTime('2014-04-07 08:17:00');

gr.u_a_date.setGlideDateTime(newDateValue);

gr.update();

gs.print('new u_a_date : ' + gr.u_a_date);

RESULT

[0:00:00.005] Script completed in scope global: script

*** Script: u_a_date : 2014-04-06 00:00:00

*** Script: new u_a_date : 2014-04-06 00:00:00

Is this a problem with the instance or is this a bug to be fixed?

Build name: HEAD (Fuji)

Build date: 09-03-2015_1003

Build tag: glide-fuji-12-23-2014__patch8-08-25-2015

1 ACCEPTED SOLUTION

NYoks1
Giga Expert

The answer to this issue is in the back-end.   The description of the field is shown as date instead of datetime in the SQL table.   ServiceNow UI shows it is in glide DateTime but on the back-end it is only date.


View solution in original post

8 REPLIES 8

The SN Nerd
Giga Sage
Giga Sage

Try this instead



gr.u_a_date = newDateValue.getDisplayValue();



Is it definitely a Date/Time field, and not just Date?



ServiceNow Nerd
ServiceNow Developer MVP 2020-2022
ServiceNow Community MVP 2019-2022

Yes it works the same way the date is captured and the time zone difference is applied in hours but the minutes and seconds are reset to 00:00 still not saved properly as a complete date and time.


I tested this against the OOB Date Time field 'Resolved' in glide-eureka-04-08-2014__patch11-hotfix2-07-08-2015 and could not reproduce the issue.



If u_a_date is definitely a DateTime field you should probably log a ticket with HI.



ServiceNow Nerd
ServiceNow Developer MVP 2020-2022
ServiceNow Community MVP 2019-2022

Also noticed that the date doesn't seem to be going in properly either.



You are putting in 2014-04-07 08:17:00


You are getting 2014-04-06 00:00:00



I think there is a business rule that is changing the value of the field.



Try this:



var gr = new GlideRecord('u_xyzTable');  


gr.get('4d967a180fe70200b8de46a32050e20');    


var newDateValue = new GlideDateTime('2014-04-07 08:17:00');  


gs.print('newDateValue: ' +newDateValue.getDisplayValue());


gr.u_a_date = newDateValue.getDisplayValue();  


gs.print('Before: ' + gr.u_a_date);  


//gr.setWorkflow(false);


gr.update();  


gs.print('After: ' + gr.u_a_date);



If your before and after are different, un comment line 7 and run the code again.


If this give you the correct after output, it means a business rule is messing with the field.



ServiceNow Nerd
ServiceNow Developer MVP 2020-2022
ServiceNow Community MVP 2019-2022