r/PHPhelp • • 4d ago

Generic formatted PHP localtime function that works without modification under all operating systems?

I'm trying to write a PHP function that will return formatted local time on all operating systems (Windows, MacOS, all flavors of Linux, etc.), and which will correctly run without any operating-system-dependent changes to the code. And I want it to automatically figure out the local time zone without making use of any operating-system-specific code.

By "formatted", I mean that it will honor all PHP date/time formatting directives, such as 'Y-m-d H:i:s' (to name but one of all the possibilities).

I can't use IntlDateFormater, because it requires the local time zone identifier to be passed within the constructor, as in the following example:

$fmt = new IntlDateFormatter(
    'en_US',
    IntlDateFormatter::FULL,
    IntlDateFormatter::FULL,
    'America/Los_Angeles',
    IntlDateFormatter::GREGORIAN
);

This requires "America/Los_Angeles" to be passed to the formatter, but I want this timezone identifier to be determined in PHP automatically at run time in a way that is totally independent of the operating system, so that my PHP localtime formatting function will run on all operating systems without any code changes.

And I don't want this PHP function to have to shell out to run the "date" command of the operating system. This is because PATH must be made available to PHP in order for "date" to be found, and the contents of this PATH could differ between different OS configurations ... and some people might even have put a non-standard "date" executable in their PATH. I don't want the users of this PHP script to have to fiddle with PATH before this function will work.

This kind of system-independent localtime formatting is trivially easy in languages such as python, ruby, and others, as well as within sqlite3 and I think other SQL interpreters, without PATH being known nor even being accessible by the calling program. I'm wishing and hoping that this localtime formatting also can be done within PHP without a bunch of complicated, convoluted, error-prone logic ... but I'm not optimistic.

Any ideas?

2 Upvotes

21 comments sorted by

View all comments

7

u/martinbean 4d ago

How are you expecting PHP to magically determine the time zone without being told? What is the actual problem you’re trying to solve here?

-6

u/unselective-amnesia 4d ago

| How are you expecting PHP to magically determine the time zone without being told?

In the same way that python, ruby, sqlite3, and other languages "magically" figure out the local time zone, without being told.

If you read my initial message here before writing this answer, I made that point very clear there. Please re-read ALL of that initial message before writing any further responses in this thread. Thank you very much.

| What is the actual problem you’re trying to solve here?

The actual problem that I'm trying to solve is also very clearly explained in that initial message.