I wasn't entirely sure what the original problem was, so I gave a hint for an implementation for the general problem. Later I realized that I hadn't indented the code section correctly, so I updated it. That said, it would be nice if more people posted cleanly written code as it makes it easier for a reader to read, understand, and provide feedback.
If everything is a full power-of-two, then you can just use unsigned/signed with addition, and then select the bits you want for each position. unsigned makes the most sense, but the operation is the same either way.
If you have something like watch -- 0-364, 0-23, 0-59, 0-59 where each limit is different, the logic can be implemented by seeing which units are at their terminal counts (364, 23, 59, 59 respectively). This vector can be used with the adder tricks in my post to generate the "add" and "reset" logic. You can also use a for-loop with variables, which might be faster now that I think a bit more about this.