A tricky thing with the work “Until” is that it is not totally obvious if it is included or excluded? Is there anything we can do here to give better clarity?
Technical detail: In our application, we always save dates as “timestamp with timezone” (postgres), so no database setting, nor connection setting, can affect the actual timestamp stored. Even though Postgres does not recommend it, we do it because it gives 100% guarantees of the date correctness in any situation and in any SQL query. You can operate with date timezones right in postgres using their date/time/timezone functions and be certain that it will work 100% correct always. We rely on it.
And then we have a timezone setting for all types of entities that need it: user profiles, markets, vouchers, reporting for accountants, and so on - so that we can translate any dates to any timezones on the fly without hesitation.
The main takeaways here are:
Always store date and time with timezone.
Always store timezone preference.
Be very explicit about dates in the UI, don’t do any magic.
Let the user see the actual dates in the choosen timezone before they click “Save”.