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 中有效

从app中的Safari链接打开safari

Webview 和移动 Safari 在渲染页面上有啥不同吗?

如何从 Web 视图打开 Safari 视图控制器(swift)

Android webview加载的页面怎样调试JS

在 Safari 而不是 webView 上仅打开特定 URL