I used to change an objects class itself in runtime in JS by changing its __proto__ property.
I don’t think that works anymore, but at the time I could create plain value objects and later make them class instantiations (on a small system way back when, this was a nice speed up due to a now uncommon pattern of having data first and waiting for the classes to load).
I read the documentation about libfaketime and I saw that it doesn't work in combination with other libraries that also play with LD_PRELOAD. Timecop could fail if something else also wraps the date and time classes but its block scoped form should keep working. I didn't check. Furthermore I don't know what's out there that does it. I should write my own code.
On Python, just use freezegun to inject controllable timestamps in response to calls to time methods.
https://github.com/spulec/freezegun