Performing math calculations on hours and minutes in a survey | XM Community
Solved

Performing math calculations on hours and minutes in a survey


Screen Shot 2020-08-15 at 8.37.47 PM.pngI am utilizing an online sleep diary to assess sleep patterns over the past week. Specifically I am asking participants the time they got into bed, the time they actually fell asleep, and the time they woke up the next day. I am using a side by side question format with text entry boxes for hours and minutes for the time they got into bed, fell asleep, and woke up. What I am trying to do is compute calculations to get the total time spent in bed, and the time they actually fell asleep. I was wondering if anyone in the Qualtrics community has feedback on how to do this or if there is a different question format I can utilize to perform these calculations in an easier fashion. Thank you in advance for your help.

icon

Best answer by TomG 16 August 2020, 14:39

View original

11 replies

TomG

Is there anything specific I need to include under the survey flow for this to run? It is still not working

Userlevel 7
Badge +27

https://www.qualtrics.com/community/discussion/comment/29241#Comment_29241Correct, that should be all you need.

TomG

Do I put the below code under the header under look and feel in the survey? Is there anywhere else I need to enter in specific code? Since I already have flatpickr in the header would it look like this with the moment js?

https://cdn.jsdelivr.net/npm/flatpickr/dist/flatpickr.min.css" rel="stylesheet" /> ">https://cdn.jsdelivr.net/npm/flatpickr">

Userlevel 7
Badge +27

From the "moment not define" error, it looks like you haven't loaded moment in the survey header.

TomG

This is my code for the sleep diary and the format the times are in are HH:MM (12:30 AM/PM) for example. I also attached my console for the feedback component that I am trying to use.
Console.png

Qualtrics.SurveyEngine.addOnReady(function()
{
   /*Place your JavaScript here to run when the page is fully displayed*/
      var Qbd = "input[id='QR~"+this.questionId+"']";
   jQuery("#" + this.questionId + " .InputText").hide();
   jQuery("#appt-time").on(" change", function() {
      jQuery(Qbd).val(jQuery("#appt-time").val()) ;
      });
   jQuery("#"+this.questionId+" td.c4 input").flatpickr({enableTime: true, noCalendar: true, dateFormat: "h:i K"});
   jQuery("#"+this.questionId+" td.c5 input").flatpickr({enableTime: true, noCalendar: true, dateFormat: "h:i K"});
   jQuery("#"+this.questionId+" td.c6 input").flatpickr({enableTime: true, noCalendar: true, dateFormat: "h:i K"});
});

Userlevel 7
Badge +27

I'm working blind since I can't see console output, but two things jump out:

  1. I don't know what format your piped dates are in, but you should probably specify the format to make sure moment parses them correctly.

  2. t0 is a variable, not a DOM element, so clone() is incorrect. You don't need it.

TomG

Hi Tom, below is the code I have but it is not working. I would appreciate any feedback. I am very new at this and have no prior experience of any coding using Java, especially within the context of Qualtrics

Qualtrics.SurveyEngine.addOnReady(function()
{
/*Place your JavaScript here to run when the page is fully displayed*/
var s0 = "${q://QID2362/SelectedAnswerRecode/10/3}";
console.log(s0);
var s1 = "${q://QID2362/SelectedAnswerRecode/10/1}";
console.log(s1);
var t0 = moment(s0);
console.log(t0.format());
var t1 = moment("${q://QID2362/SelectedAnswerRecode/10/1}");
console.log(t1.format());
var tdiff = t0.clone().diff(t1, 'hours')
console.log(tdiff.format());
});

Userlevel 7
Badge +27

https://www.qualtrics.com/community/discussion/comment/29143#Comment_29143I think you'll want to use moment's diff function:
https://momentjs.com/docs/#/displaying/difference/

TomG

Tom, thank you so much for your input. I was able to successfully use flatpickr for the time inputs in my matrix table, however I am running into issues with the momentjs for calculations. I looked on the available forums on the Qualtrics community and was able to find a thread for date but not for time. I want to create a new question and calculate the total time spent in bed, asleep, and then calculate a sleep efficiency score by dividing the two variables and multiplying by 100. How can I go about doing this for my previous matrix question with the times for each day? Can I use a variation of the below code that you posted on another forum?

Qualtrics.SurveyEngine.addOnPageSubmit(function() {
   var monbed = moment(jQuery("#"+this.questionID+” .InputText").val()).subtract(2, 'weeks');
   Qualtrics.SurveyEngine.setEmbeddedData('startDate', startDate);
});


Thank you so much Tom. I will look into those two options

Userlevel 7
Badge +27

Use moment.js to do the calculations.
You could use flatpickr for the time inputs. That way each time would be in a single field.
There are a number of Community posts about flatpickr and a few about moment.js.

Leave a Reply