Hi,
Seeing some odd behaviour with Time calculations not returning Number, as per the documentation. https://developer.garmin.com/connect-iq/api-docs/Toybox/Time/Moment.html#compare-instance_function
This then triggers an unrecoverable error if the output is used within a subsequent Time calculation:
ERROR: Unhandled Exception DETAILS: NONE STORE_ID: CALLSTACK: UnexpectedTypeException: Expected an object of type Time.Duration native function
It looks like the ultimate cause might be a problem with Time.Moment.add();
For example:
function momentNType(moment) { var n = moment.value(); System.println(moment+" has value of "+n); nType(n); } function nType(n) { System.println(n+" is Number? "+(n instanceof Number)+" Long? "+(n instanceof Long)); } function getOClock(nHoursAgo) { var nowTime = Time.now(); var info = Gregorian.info(nowTime,Time.FORMAT_SHORT); var adjustSeconds = (nHoursAgo-1)*3600 + info.min*60 + info.sec; System.println("CALCULATE OCLOCK WITH "+nHoursAgo); nType(adjustSeconds); // Subtracting a Duration from a Moment was not supported until ConnectIQ 3.0.0. // If backward compatibility is a concern, it may be best to add a negative Duration instead. return nowTime.add(new Time.Duration(-adjustSeconds)); } // And then... var heartTime = getOClock(heartGraphInSeconds/3600); // Time.Moment var difference = Time.now().compare(heartTime); System.println("Output from getOClock method"); momentNType(heartTime); System.println("GETS"); nType(difference); /////////////////////////// // CONSOLE OUTPUT Output from getOClock method Obj: 192 has value of 1599465600 1599465600 is Number? false Long? true GETS 3928 is Number? false Long? true
G