-
Notifications
You must be signed in to change notification settings - Fork 446
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat: add displayTimezone option to datetime input #8181
base: next
Are you sure you want to change the base?
Conversation
The latest updates on your projects. Learn more about Vercel for Git ↗︎
2 Skipped Deployments
|
No changes to documentation |
Component Testing Report Updated Jan 14, 2025 4:39 PM (UTC) ✅ All Tests Passed -- expand for details
|
⚡️ Editor Performance ReportUpdated Tue, 14 Jan 2025 16:40:44 GMT
Detailed information🏠 Reference resultThe performance result of
🧪 Experiment resultThe performance result of this branch
📚 Glossary
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is a great addition. Could you add an example to the datetimeTest
schema type in the test studio so we can more easily test this on a preview deployment?
NAD (Not A Designer), but from my perspective I'd love it if there was some way to reveal more information.
- If the users' timezone is not the same as the display timezone, having a way to show what the chosen time is in "your" timezone can be helpful.
- Potentially showing what the stored UTC time is (possibly also hinting that this is the "stored value")
I'm pondering if it might make sense to always show the timezone being displayed, and hide the additional information I mentioned behind a tooltip/info icon or similar. Currently (in next) I could see people putting in a date and forgetting that they might be in a different timezone than what they usually are and end up with an incorrect value being stored.
packages/sanity/src/core/form/inputs/DateInputs/DateTimeInput.tsx
Outdated
Show resolved
Hide resolved
packages/sanity/src/core/form/inputs/DateInputs/DateTimeInput.tsx
Outdated
Show resolved
Hide resolved
packages/sanity/src/core/form/inputs/DateInputs/DateTimeInput.tsx
Outdated
Show resolved
Hide resolved
packages/sanity/src/core/form/inputs/DateInputs/DateTimeInput.tsx
Outdated
Show resolved
Hide resolved
Thanks for the feedback! 🙌 I think I'll run this by a designer as you bring up good points! Would be good to get a stamp of approval on it, but I think given the use cases in this thread whereby you are inputting data for a specific show at an opera house or property viewing that is very local you always just want it to be fixed, so I'm not sure I'm seeing the need to change the timezone use case (maybe this could be added in the future with a Also not sure why an editor would want to know the utc time? Could be a useful devtool thing though if you don't want to have to go to vision to see your data? |
Sorry, I wasn't being precise in my feedback; the thing I was trying to address was that you don't know what timezone the date you are entering represents. Are you entering a UTC date? Your local timezone? The timezone the developer chose when they configured the schema? Your PR addresses the last one; but only if you've set a display timezone. I am asking myself if seeing the timezone is so helpful that it should always be visible, even if the developer has not set a timezone explicitly. If no display timezone is set, it would show the users' local timezone, as that is what the default behavior is. Does that make sense?
Yeah, I may be overindexing on myself as a developer here. I keep seeing people stumble when they try to use the date in their frontends, thinking that the date stored is the same as the one they are seeing, but surfacing the UTC date to all users because of this is probably excessive. |
I can add some more context on the use cases and customer needs here: https://sanity-io.slack.com/archives/C3Q637VGW/p1737038508203349 |
9caf5d8
to
691aad1
Compare
Description
Adding the ability to add a
displayTimezone
option to thedatetime
input. This allows you to specify the timezone in which the stored UTC string from content lake will be displayed. When enabled, a tooltip is shown at the bottom left of the input field which indicates the timezone the field is representing. When you start editing this disappears.A common use case here could be anything local that you would be working on in another timezone, for example concert times, apartment viewing times etc. etc. which are hard to work with today as the studio (just like the Date API) respects only the browsers relative display of the UTC string.
We have lots of signal on this one in this thread, as well as directly from users.
In addition to this, I decided to give it a go of removing moment from the
@sanity/util
package as a testbed how we should go about removing it across the entire codebase.I am using the new date-fns/tz and date-fns/utc packages from date-fns. The reason for these is that they are very lightweight,
TZDateMini
which I am using here is only 916 B, which is a whopper difference from the locale bloat frommoment-timezone
dep we would need to make this work withmoment
.As we have the ability to add custom date formats via the options on the
datetime
input and this is documented as support moment.js formats, I decided to write a formatter that would use the Intl.DateTimeFormat.format functionality instead by mapping the moment formatting to that format object.What to review
displayTimezone
is worth a discussion.Intl.DateTimeFormat
browser API means that browser versions outside the widely supported will not work.Testing
I added two tests where I thought they should go that take account for this being in place and for Winter and Summer timezones. Happy to add more should we sit fit!
Notes for release
Might actually be worth mentioning: "The ability to specify the display timezone for your
datetime
fields".