[Discussion] Add date_test_set_now() function
| From: | Go Kudo | Date: | Mon, 01 Jul 2024 13:07:15 +0000 |
| Subject: | [Discussion] Add date_test_set_now() function | ||
| Groups: | php.internals | ||
| Request: | Send a blank email to internals+get-124139@lists.php.net to get a copy of this message | ||
Hi, Internals.
I've been absent for a long time due to poor health. I'm finally back.
I maintain a legacy application written in PHP, and occasionally need to
fake the current time for testing purposes. However, PHP doesn't provide a
standard way to fake the current time, so I've been changing the OS's
current time to do this, which is quite painful.
This can be avoided by using third-party libraries (such as
Carbon::setTestNow()). However, it's almost impossible to modify all parts
of a legacy application that depend on the current time.
Another option is to use libfaketime (https://github.com/wolfcw/libfaketime),
but this is also quite painful to use.
Since this was absolutely necessary for my work, I implemented this
functionality as a PHP Extension. (Please ignore the dirty implementation
related to PDO. I'm not planning to propose it this time.)
https://github.com/colopl/php-colopl_timeshifter
However, this Extension has some problems.
The first is that there's no way to determine whether the format passed to
the ext-date parser is relative or absolute time, resulting in a dirty hack
using usleep. The second is that it depends on timelib, so it breaks when
upstream changes related to timelib are made.
So, how about adding a
date_set_test_now(\DateInterval $shiftInterval)
function to ext-date?
This function would treat the current time as shifted by the passed
DateInterval. Since it's implemented on the ext-date side, there's no need
for dirty hacks using usleep.
I'd like to hear your opinions. Thank you.
Best Regards,
Go Kudo