Safari 和 WebView 上的 toLocaleTimeString 转换为不正确的时间
Posted
技术标签:
【中文标题】Safari 和 WebView 上的 toLocaleTimeString 转换为不正确的时间【英文标题】:toLocaleTimeString on Safari and WebView converts to incorrect time 【发布时间】:2020-05-22 15:03:20 【问题描述】:我正在开发一个 Angular Web 应用程序。
用户可以通过指定区域设置来更改日期和时间的显示方式。
这在 firefox、chrome、android webView 中运行良好,但是在 Safari 和 ios webView 中我得到了奇怪的结果。
let dateTime = new Date(0,0,0,hours,minutes);
console.log(dateTime); // Shows: Sun Dec 31 1899 10:16:00 GMT+0200 ( EET )
console.log(dateTime.toLocaleTimeString('en-US', hour: 'numeric', minute: 'numeric'))); // Shows: 9:40 AM
为什么这个时间错了 36 分钟,又是如何错的?
我该如何解决。有没有其他方法可以使用区域设置将Date
类型转换为时间字符串?
Intl.DateTimeFormat('en-US', hour: 'numeric', minute: 'numeric').format(dateTime)
结果一模一样。
【问题讨论】:
【参考方案1】:您会惊讶于 javascript 中的日期有多少问题(: 使用一些库作为日期会让你的生活更轻松。 The date libraries overview article。 Momentjs 是一个古老的大怪物。轻量级的 Luxon 或 DayJs 通常就足够了。
【讨论】:
瞬间解决了。其他选项似乎没有语言环境支持,或者以我需要的方式支持,所以 Moment 库是唯一的选择。太糟糕了,它为项目增加了 300kB【参考方案2】:我在 iOS 的 WebView 中也遇到过这个问题。我使用 moment 库来处理日期转换,它可以在 Android/iOS 上正确处理它。
我建议将 moment.js 导入并使用到您的项目中,并使用它来处理要在 WebView iOS 中呈现的日期。
【讨论】:
以上是关于Safari 和 WebView 上的 toLocaleTimeString 转换为不正确的时间的主要内容,如果未能解决你的问题,请参考以下文章
XCODE swift - webview 无法打开 ics 链接 - 在 safari 中有效
Webview 和移动 Safari 在渲染页面上有啥不同吗?