Safari 和 WebView 上的 toLocaleTimeString 转换为不正确的时间

toLocaleTimeString on Safari and WebView converts to incorrect time

我正在开发 Angular 网络应用程序。

用户可以通过指定区域设置来更改日期和时间的显示方式。

这在 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)结果完全一样

您会惊讶于 javascript 中的日期有多少问题 (: 使用一些日期库会让您的生活更轻松。 The date libraries overview article。 Momentjs 是一个古老的大怪物。轻量级的 Luxon 或 DayJs 通常就足够了。

我在 iOS 的 WebView 中也遇到过这个问题。我使用 moment 库来处理日期转换,它在 Android/iOS 中正确处理了它。

我建议将 moment.js 导入到您的项目中并使用它来处理要在 WebView 中呈现的日期 iOS。