将.net core TimeZoneInfo与momentjs一起使用的最佳实践是什么?



我们根据netcore TimeZoneInfo生成的列表存储用户的时区。从那里,我们允许最终用户使用选择器指定日期和时间,这些选择器存储在数据库中。所有这些都运行良好。用户选择一个日期和时间,知道时区指定了"where"

然而,在前端,我们使用momentJS进行格式化。因为我知道timezoneinfo Id在前端也是什么,我想知道我是否可以将日期和timezoneid插入momentjs中,使用.format()命令来操作日期。

我正在考虑放弃momentjs,并在后端格式化日期,但momentjs为我们的UI设计师提供了灵活性,而无需重新部署。

想法吗?

几点:

  • 你真的应该考虑用一个更现代的库替换Moment。请阅读(我写的)当前项目状态以了解更多细节。

    • 如果要继续使用Moment,您还需要Moment- timezone附加库来处理时区。如果您选择像Luxon这样的库作为替代,则会内置时区支持。

    • 或者,您可以考虑使用Date.toLocaleStringtimeZone选项。如果这满足了你的需要,那么你就根本不需要库了。

  • . net中的
  • TimeZoneInfo对象将其Id属性与它们运行的平台对齐。也就是说,你在Windows上获得Windows id,在Linux和macOS上获得IANA id。如果您不熟悉它们的区别,您应该阅读timezone标记wiki。

  • Windows时区id对JavaScript库不起作用。您将始终需要使用IANA id。

    • 如果你在Linux上运行你的服务器,你已经在你的TimeZoneInfo.Id属性中有了IANA值,并且都设置好了。你可以直接在JavaScript中使用它们。

    • 如果你在Windows上运行服务器,并且正在使用。net 6或更新版本,并且在安装了ICU的系统上,你可以使用TimeZoneInfo.TryConvertWindowsIdToIanaId从Windows ID中获得所需的IANA ID。你可以在我为微软写的博文中了解更多。

    • 如果你在Windows上运行并且是。net 5或更低版本,或者是在没有安装ICU的旧Windows上,你可以使用我的TimeZoneConverter库在Windows和IANA id之间转换。

相关内容

最新更新