Skip to content
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

Consider using Intl api #498

Open
benmccann opened this issue Feb 15, 2019 · 20 comments
Open

Consider using Intl api #498

benmccann opened this issue Feb 15, 2019 · 20 comments

Comments

@benmccann
Copy link

benmccann commented Feb 15, 2019

I really like the way Luxon does localization and time zone support by using Intl.DateTimeFormat

For time zones, it allows the user to specify any time zone without any extra files to download compared to solutions for other libraries that are quite large. See their timezone docs and code for more details. This could be a possible method of implementing #323, #249, #46

For localization, it's far easier to maintain because you do not need to create or maintain any translations on your side. This could fix several issues such as #416, #415, and #171. It's also easier for users because they don't need any extra files and everything works out-of-the-box. See their Intl docs and code for more details

Would there be any interest in this approach?

@ghost
Copy link

ghost commented Feb 16, 2019

Good point, but the Internationalisation API isn't supported in all browsers just yet https://caniuse.com/#feat=internationalization

@benmccann
Copy link
Author

benmccann commented Feb 16, 2019

There are polyfills that can be used on other browsers.

For localization: <script src="https://cdn.polyfill.io/v2/polyfill.js?features=Intl.~locale.zh"></script>

For time zones: https://github.com/yahoo/date-time-format-timezone

@ghost
Copy link

ghost commented Feb 16, 2019

I think these things should be done by our libs, not leave to our users.

@benmccann
Copy link
Author

Ok, it's good to know that. Though users will have to take some action in either case.

With the Intl api, users that want to support older versions of IE need to do:

<script src="https://cdn.polyfill.io/v2/polyfill.js?features=Intl.~locale.zh"></script>

E.g. with dayjs users have to do this to an even greater extent because it must be done for all browser versions:

<script src="https://unpkg.com/dayjs/locale/zh-cn"></script>

@iamkun
Copy link
Owner

iamkun commented Feb 18, 2019

Good suggestion.

@damianobarbati
Copy link

I just discovered this project and while I was considering to move all my company's projects to this lib I stumbled upon this.

IMHO what's actually killing momentjs is the need to import locales files and the payload burden which this implies.
Given the nature of web-apps you cannot know ahead of time (building phase) what locale your users will be needing and importing all of them would result in another momentjs.
Leveraging the Intl API provided by the underlying OS/browser is the present and future of date manipulation in JS.

@iamkun would you consider moving to an Intl-first approach with manual locale file importing fallback?

That's all this lib needs to take over in the ecosystem.

I didn't dig into the code to discover how you managed to keep it all under 2kb but hey... GOOD JOB!! 🤟🏻

@ghost
Copy link

ghost commented Mar 4, 2019

@damianobarbati you could import locale files dynamically based on user's OS.

@damianobarbati
Copy link

@xxyuk sure, I can async-import anything and work-around whatever in a web application.
But the less code, the less bugs. And browser can do the heavy lift, so why carrying this burden? :)

@dandv
Copy link

dandv commented Mar 20, 2019

date-fns does exactly what @benmccann suggested:

Dependency free IANA time zone support is implemented via the Intl API to keep actual time zone data out of code bundles. Modern browsers all support the necessary features, and for those that don't a polyfill can be used.

@IssueHuntBot
Copy link

@IssueHunt has funded $200.00 to this issue.


@iamkun
Copy link
Owner

iamkun commented May 9, 2019

Intl is a nice choice for timezone plugin

@janat08
Copy link

janat08 commented Jun 1, 2019

the Intl api will output "11th of may" semantically in russian while it remains as a single word and a number, therefore conforming to the order of format that asks for month's day after the month would be incorrect in that language. I'm writing this feature so that it will default to locale file if it's provided, but use and accept intl options otherwise, like localized numbering/calendars while only listening to how abbreviated you want the string to be.

@janat08
Copy link

janat08 commented Jun 1, 2019

It will also default to the previous behavior with respect to the ordering of date with default locale of en, ignoring intl options.

@janat08 janat08 mentioned this issue Jun 2, 2019
@HugoGresse
Copy link

HugoGresse commented Jan 20, 2020

It is 2020, Intl api is supported by most browser (caniuse) except Opera Mini, QQBrowser and Kalios browser.
95% of the users.

I was looking into this article and Dayjs and Luxon are clearly the winner there.
My experience with Luxon and Intl was very good, I'm sad that Day.js does not support it.

@janat08
Copy link

janat08 commented Jan 21, 2020

We're trying to find a simpler way to detect and correct daylight savings related changes, in liu of roling with just the simple solution and rewarding that with the bounty.

@issuehunt-oss issuehunt-oss bot added 🎁 Rewarded on Issuehunt This issue has been rewarded on Issuehunt and removed 💵 Funded on Issuehunt This issue has been funded on Issuehunt labels Apr 15, 2020
@iamkun iamkun removed the 🎁 Rewarded on Issuehunt This issue has been rewarded on Issuehunt label Apr 15, 2020
Repository owner deleted a comment from issuehunt-oss bot Apr 17, 2020
@iamkun
Copy link
Owner

iamkun commented Aug 4, 2020

Update: Day.js Time Zone Plugin with Intl API

https://day.js.org/docs/en/timezone/timezone

@theo-staizen
Copy link

Update: Day.js Time Zone Plugin with Intl API

https://day.js.org/docs/en/timezone/timezone

Hi @iamkun the timezone plugin works great, however the localizedFormat plugin still depends on loading the locale files

@vaheqelyan
Copy link

Any updates?

@Lonli-Lokli
Copy link

Just to mention, intl isn't updated by browsers too quickly, that's the difference between moment-tz and Intl

@xdoer
Copy link

xdoer commented Jul 24, 2024

Any updates?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests