我们根据netcore TimeZoneInfo生成的列表存储用户的时区。从那里,我们允许最终用户使用选择器指定日期和时间,这些选择器存储在数据库中。所有这些都运行良好。用户选择一个日期和时间,知道时区指定了"where"
然而,在前端,我们使用momentJS进行格式化。因为我知道timezoneinfo Id在前端也是什么,我想知道我是否可以将日期和timezoneid插入momentjs中,使用.format()命令来操作日期。我正在考虑放弃momentjs,并在后端格式化日期,但momentjs为我们的UI设计师提供了灵活性,而无需重新部署。
想法吗?
几点:
-
你真的应该考虑用一个更现代的库替换Moment。请阅读(我写的)当前项目状态以了解更多细节。
-
如果要继续使用Moment,您还需要Moment- timezone附加库来处理时区。如果您选择像Luxon这样的库作为替代,则会内置时区支持。
-
或者,您可以考虑使用
Date.toLocaleString
和timeZone
选项。如果这满足了你的需要,那么你就根本不需要库了。
. 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之间转换。