How do I invert this timer in BGE to make it count-down? This is from an answer I received here: timer


  I suggest to avoid this method to measure time. The BGE will try to
  keep the given frame rate as much as possible, but there is no
  guaranty.
  
  I recommend to use a timer property. It counts the seconds. I think
  that is what you really want.
  
  Then you have several ways to show the time. I think you want to
  format it to minutes:seconds. You can use this little script
  timeToText:


 import bge 
 from datetime import datetime

 textObject = bge.logic.getCurrentController().owner 
 time = datetime.fromtimestamp(textObject["time"]) 
 textObject.text = '{:%M:%S}'.format(time)



  It expects a property time to provide the seconds and should be
  applied to an text object.
  
  
  
  You can indeed refresh the display each 60 frames. But you will not
  know when the seconds changed. Therefore I suggest to run it
  constantly.
  
  Hint: If you want to show microseconds too, use this format:
  {:%M:%S.%f}


This works. But the timer in bge counts upwards. What if I want it to count let's say from 30 minutes downwards? 

How can I "invert" the timer?
I guess I can assign the original value 30 to the property time but how do I achieve the countdown logic afterwards?
You could simply negate the time property (-1800 seconds) and parameter of datetime.fromtimestamp(-textObject["time"]): 



import bge 
from datetime import datetime

textObject = bge.logic.getCurrentController().owner
if textObject["time"] &lt; 0:
    time = datetime.fromtimestamp(-textObject["time"])
    textObject.text = '{:%M:%S}'.format(time)