The volatile keyword is a part of C standard, and this warns the compiler that ISR might change the value of a variable so that the compiler will not optimize the code in a way that will make it fall.
Here, need to declare:
static volatile long int iSecondsToday;
With the volatile keyword in the declaration, the compiler will know that the variable is volatile and each reference is read from memory.
If the keyword is not supported, you can still get the similar result by turning off the compiler optimizations.