Find your people. Pick a challenge. Ship something real. The CreatorCon Hackathon is coming to the Community Pavilion for one epic night. Every skill level, every role welcome. Join us on May 5th and learn more here.

set date/time - specific time in the past

matthew_magee1
Giga Guru

Hi all,

I know various flavors of this question have been asked before; yet I can't seem to find a simple solution.

I am running Geneva.

On the CHG form, I have 2 date/time fields:

  1. Start Date (start_date)
  2. Notification Date (u_notification_date)

If the user selects 5/8/17 as the start date, I'd like the Notification date to automatically default to the date before @ 14:30:00. In this example, the Notification Date would default to 5/7/17 @ 14:30:00

Any help is greatly appreciated

1 ACCEPTED SOLUTION

oharel
Kilo Sage

Hi Matthew,



If both are date/time, this is what works for me:


onChange client script:


function onChange(control, oldValue, newValue, isLoading, isTemplate) {


  if (isLoading || newValue === '') {


  return;


  }



  //Type appropriate comment here, and begin script below


  g_form.clearValue('u_notification_date');


  var start = g_form.getValue('start_date');


 


  //var ga = new GlideAjax('')


  var ga = new GlideAjax('setMyDate');


  ga.addParam('sysparm_name','getDateTime');


  ga.addParam('sysparm_start',start);


  ga.getXML(ParseTheTime);


   


  function ParseTheTime(response) {


  var answer = response.responseXML.documentElement.getAttribute("answer");


  g_form.setValue('u_notification_date',answer);



  }


}




script include:


var setMyDate = Class.create();


setMyDate.prototype = Object.extendsObject(AbstractAjaxProcessor, {



  getDateTime : function() {



  var start = this.getParameter('sysparm_start');


  var days = 1;



  var strDate = start.split(' ')[0];


  var vDate =   new GlideDateTime(strDate);


  vDate.addDays(-days);


  var vDateStr = vDate.getDate() + ' 14:30:00';


  return vDateStr;



  },


      type: 'setMyDate'


});



Based on amlanpal 's script in another post.


harel


View solution in original post

10 REPLIES 10

Just noticed one small issue. As you can see, our date format is: MM-dd-yyyy but the script will generate it like: yyyy-MM-dd.



capture.jpg



Because we like to be different, the date selector still shows the 8th, but the data inserted into the field as text is the 16th.



If i update the script include, can i format the output of the date to our format: MM-dd-yyyy?



I see a property called 'setDisplayValue(String value, String format)' but am not sure how it incorporate this into the script include.



thanks Harel!



Matthew


Hi Matthew,



I don't think that the script include - mine or amlanpal 's - take the date format into account, though.


Just curious how come some of your fields are in yyy-MM-dd format and others are in MM-dd-yyyy ?


Thanks for mentioning me oharel. I'm also curious to know how this is been configured? It will be really interesting to know how some fields are configured as   MM-DD-YYYY and some are in YYYY-MM-DD.


Hey Harel,


I changed the property glide.sys.date_format to MM-dd-yyyy



That is a screen shot from an old ticket when the dates were yyyy-MM-dd



If i create a new ticket, the dates are MM-dd-yyyy, but old tickets that have date values are yyyy-MM-dd.



I'm playing w/ the formatting of the date now to see if I can get the correct date selected on the calendar. I'll keep you all posted



matthew


Harel/Amlan-



It aint' pretty but it works:



var setMyDate = Class.create();


setMyDate.prototype = Object.extendsObject(AbstractAjaxProcessor, {


     


      getDateTime : function() {


             


              var start = this.getParameter('sysparm_start');


              gs.log("original date: " + start);


              var days = 1;


             


              var strDate = start.split(' ')[0];


              var strMnth = start.split('-')[0];


              var strDay = start.split('-')[1];


              var strYr = start.split('-')[2];


              var year = strYr.substring(0, 4);


              //gs.log("new start date: " + strDate);


              gs.log("year: " + year);


              gs.log("month: " + strMnth);


              gs.log("day: " + strDay);


              var newDate = strDay -1;


              gs.log("new day: " + newDate);


              //   var vDate =   new GlideDateTime(strDate);


              //           gs.log("New start date 2: " + vDate);


              //   vDate.addDays(-days);


              //   var vDateStr = vDate.getDate() + ' 14:30:00';


              var vDateStr = strMnth + "-" + newDate + "-" + year + ' 14:30:00';


              return vDateStr;


             


      },


      type: 'setMyDate'


});




I basically had to take the date that was selected, then split it up into 3 chunks:


Year


Month


Day



The put it in the order that I wanted and add 14:30 to the end



Now the other days on my old ticket are MM-dd-yyyy for some reason. I can't explain that one