将 .net core TimeZoneInfo 与 momentjs 结合使用的最佳做法是什么?
What's the best practice for using .net core TimeZoneInfo with momentjs?
我们根据 .netcore TimeZoneInfo 生成的列表存储用户的时区。从那里,我们允许最终用户使用存储在数据库中的选择器指定日期和时间。所有这些都工作正常。用户选择日期和时间,知道时区指定“where”。
但是在前端,我们使用 momentJS 进行格式化。因为我也知道前端的 timezoneinfo Id 是什么,所以我想知道是否可以将日期和 timezoneid 插入 momentjs 以使用 .format() 命令来操作日期。
我正在考虑放弃 momentjs,并在后端格式化日期,但 momentjs 为我们的 UI 设计人员提供了灵活性,而无需重新部署。
想法?
几件事:
您真的应该考虑用更现代的库替换 Moment。请阅读 Moment Project Status(我写的)以获取更多详细信息。
如果您要继续使用 Moment,您还需要 Moment-Timezone add-on library to work with time zones. If you choose a library such as Luxon 作为替代,时区支持是 built-in.
或者,您可以考虑使用 Date.toLocaleString
和 timeZone
选项。如果满足您的需求,那么您根本不需要图书馆。
TimeZoneInfo
.NET 中的对象将它们的 Id
属性 与它们 运行 所在的平台对齐。也就是说,您在 Windows 上获得 Windows ID,在 Linux 和 macOS 上获得 IANA ID。如果您不熟悉其中的区别,您应该阅读 the timezone
tag wiki.
Windows 时区 ID 对 JavaScript 库没有用。您将始终需要使用 IANA ID。
如果您是 运行 您在 Linux 上的服务器,您的 TimeZoneInfo.Id
属性 中已经有 IANA 值,并且都已设置。您可以直接在 JavaScript.
中使用它们
如果您 运行 您的服务器在 Windows 上,并且正在使用 .NET 6 或更新版本并且在 ICU installed, you can use TimeZoneInfo.TryConvertWindowsIdToIanaId
to get the required IANA ID from a Windows ID. You can read more about this in the blog post I wrote for Microsoft.[=23 的系统上=]
如果您在 Windows 上 运行 并且在 .NET 5 或更低版本上,或者在没有安装 ICU 的旧 Windows 上,您可以使用我的TimeZoneConverter 在 Windows 和 IANA ID 之间转换的库。
我们根据 .netcore TimeZoneInfo 生成的列表存储用户的时区。从那里,我们允许最终用户使用存储在数据库中的选择器指定日期和时间。所有这些都工作正常。用户选择日期和时间,知道时区指定“where”。
但是在前端,我们使用 momentJS 进行格式化。因为我也知道前端的 timezoneinfo Id 是什么,所以我想知道是否可以将日期和 timezoneid 插入 momentjs 以使用 .format() 命令来操作日期。
我正在考虑放弃 momentjs,并在后端格式化日期,但 momentjs 为我们的 UI 设计人员提供了灵活性,而无需重新部署。
想法?
几件事:
您真的应该考虑用更现代的库替换 Moment。请阅读 Moment Project Status(我写的)以获取更多详细信息。
如果您要继续使用 Moment,您还需要 Moment-Timezone add-on library to work with time zones. If you choose a library such as Luxon 作为替代,时区支持是 built-in.
或者,您可以考虑使用
Date.toLocaleString
和timeZone
选项。如果满足您的需求,那么您根本不需要图书馆。
TimeZoneInfo
.NET 中的对象将它们的Id
属性 与它们 运行 所在的平台对齐。也就是说,您在 Windows 上获得 Windows ID,在 Linux 和 macOS 上获得 IANA ID。如果您不熟悉其中的区别,您应该阅读 thetimezone
tag wiki.Windows 时区 ID 对 JavaScript 库没有用。您将始终需要使用 IANA ID。
如果您是 运行 您在 Linux 上的服务器,您的
中使用它们TimeZoneInfo.Id
属性 中已经有 IANA 值,并且都已设置。您可以直接在 JavaScript.如果您 运行 您的服务器在 Windows 上,并且正在使用 .NET 6 或更新版本并且在 ICU installed, you can use
TimeZoneInfo.TryConvertWindowsIdToIanaId
to get the required IANA ID from a Windows ID. You can read more about this in the blog post I wrote for Microsoft.[=23 的系统上=]如果您在 Windows 上 运行 并且在 .NET 5 或更低版本上,或者在没有安装 ICU 的旧 Windows 上,您可以使用我的TimeZoneConverter 在 Windows 和 IANA ID 之间转换的库。