I think this would be only with macros possible. One in an OnOpen action and one in an OnClose action and maybe some between them which write in a text-file. But then you need to enforce the usage from macros.
Within the easter egg is the option ExtendErrorLoggingMode available which will log (all ?) errors from the client in a looging-file witch is placed under the user-account/documents. But as far I know it tracked only errors, maybe you could create a harmless error to use these logging. It could be that there more options within the easter egg which could be used in that case.
Another possibilty could be to put direct discovery request within open- and close-trigger and use a logging from the requested database.
But I think this would be not really easier then a macro-solution. Maybe others have further ideas.
that idea with the error_logging sounds quite good - I don't know any other way if anyone uses an app on his/her own Desktop.
If you can just insert some LOAD of a file that is not available and put a > SET errormode=0 < before it (and a > SET errormode=1 < after it) so the script will not stop because of that error, but then it should be logged and if you get a timestamp of that error, that will be fairly precise.
i think it will also appear in the ScriptError-something. I will do some testing on that.
P.S.: Well, the variables in the app itself do not tell you the time - but the error, though ignored by the script, is in the document_log. That is not on the individual user's machine, but on the server where the app is - so you can access it and parse it looking for a keyword with that error type and note the time. The only open question is thus when to run your batch or whatever to parse that logfile - the easiest would probably be to use the log_files on the QlikViewServer instead, those are never overwritten, so you can parse them all just once a day.