gpt4 book ai didi

javascript - Android webview 中的语言环境时间错误

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:00:07 25 4
gpt4 key购买 nike

我们有一个 android 应用程序,它或多或少只包含一个 webview,显示一个 webapp。在某些时候,我们想向用户显示一些时间戳并使用以下代码

let dateString = new Date().toLocaleTimeString();

问题是,这总是产生 12 小时时间表示(即使用 AM/PM,例如 3:15 PM 而不是 15:15),即使我们将设备设置为使用 24 小时时钟(并且设备确实遵守此设置,因为我们在状态栏中看到了正确的时间)。我们还将设备设置为使用德语并删除了英语设置。也没有运气。使用了设备区域设置,因为我们的应用程序以正确的语言显示,但时间字符串仍然错误。

window.navigator.language  -> "de-AT"
new Date().toLocaleTimeString(); -> "6:10:13 PM"
new Date().toLocaleTimeString(window.navigator.language); -> "18:10:32"

乍一看,最后一行似乎是一种可能的解决方法,但如果语言是例如“en-US”,则无论操作系统是否配置为使用 24 小时制,这将始终返回 12 小时格式。

我知道 this问题,这似乎与这个问题有某种关系,但答案对我们不起作用。

使用我发现的各种虚拟设备,它仍然可以在 chrome 58(在 API 26 上)上正常工作,但在 chrome 61(在 API 27 上)上不再工作。目前在 chrome 70 beta 测试,问题依然存在。

同样重要的是要注意,它在 chrome 本身中正常工作(即,如果我在测试网站中显示时间戳,它使用系统设置),但仅在 webview 中失败。

我们目前的解决方法是通过 native 应用程序生成时间戳,但这看起来相当笨拙。

更新

我知道我可以在 webapp 端做一些事情,比如覆盖 toLocaleTimeString(事实上,我已经这样做了,以便从 native 应用程序获取正确的格式)。

我的问题更多是关于:在 native WebView 中是否有任何已知的更改行为(并且可能是反转此设置)导致此问题发生,因为这有效/有效在 Chrome <= 58 的设备上。

与此同时,我向 chromium 提出了一个问题,他们能够重现它。也许这会在下一个版本中得到修复......

更新 2

这个问题已经在谷歌方面得到解决,可能会在未来的更新中推出。与此同时,我将继续使用我当前对 toLocaleTimeString() 的覆盖,它会回调 native 应用程序 ...

最佳答案

请尝试覆盖函数 Date.prototype.toLocaleTimeString

let f = Date.prototype.toLocalString;

Date.prototype.toLocalString = function(){
let s = f();
//since the method fails for US-locale manupulate s as required when locale is US and system is set to show 24 hr

// if ends with AM - just delete "AM"
// if ends with PM - add 12 to hr and delete "PM"
return s;
}
---请避免直接修改内置JS对象的原型(prototype)---我还要指出,不建议使用 JS 的内置对象,因为它可能会中断或中断某些外部库的执行。因此,最好创建一个新对象并修改该对象的原型(prototype) - 使用原型(prototype)继承。

关于javascript - Android webview 中的语言环境时间错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52663962/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com