javascript - 用于确定浏览器是否使用 12 小时或 24 小时格式显示时间输入的 JavaScript
问题描述
我想确定浏览器如何显示时间输入:
<input type="time">
它显示为 24 小时格式还是 12 小时格式(添加了“AM/PM”选项)?
显示会影响设计,因为两个版本的宽度不同。我想保持多个输入的宽度尽可能紧凑。
我仔细查看了其他文章,但很多都相当老旧,信息已经过时,当我运行代码摘录时,结果并不一致。
此 JavaScript 仅采用语言环境(此处为:en_GB)并按如下方式应用它:
var hour_format = new Date().toLocaleTimeString();
console.log(hour_format); // Firefox: 18:12:34, Chrome: 6:12:34 PM, Edge: 18:12:34
附加说明:我在英国,在 Windows 10 上使用 24 小时格式。浏览器反映 24 小时系统偏好;JavaScript 时间字符串没有。当我更改为 12 小时格式(并重新启动)时,更改仅由 Chrome 应用。JavaScript 示例中的值保持不变。我读过这篇关于 GB locales的文章,但它只是显示了不一致之处。
基本上,我只想知道浏览器显示的是哪一个。而已。
如果这是不可能的,则强制输入使用 24 小时格式显示将是一种替代方法。
解决方案
这是我通过结合@mplungjan 的第一个解决方案和@CBroe 检查输入宽度的建议得出的解决方案:
var local_time_string = (/chrom(e|ium)/i.test(navigator.userAgent) && !/msie|edge/i.test(navigator.userAgent)) ? false : (new Date(2020, 4, 8, 18, 0, 0, 0).toLocaleTimeString()),
hour_format = (typeof local_time_string == 'string') ? ((parseInt(local_time_string) == 18) ? 24 : 12) : null;
if (hour_format == null) {
$('#parent-element').append('<input type="time" id="time-test" name="time-test" style="width: auto; position: absolute; opacity: 0; visibility: hidden;">');
hour_format = ($('#time-test').width() < 81) ? 24 : 12;
$('#time-test').remove();
}
console.log(hour_format);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="parent-element"></div>
推荐阅读
- r - 按组计算描述性统计
- python - 变量在 for 循环中未正确重新定义(Python)
- android - 完美运行一段时间后,应用程序崩溃
- c++ - C++ 性能 std::array 与 std::vector
- algorithm - 最小化在池中解决债务的交易成本
- c# - 在 Hololens 上的 C# Unity 中找不到模块 C++ .dll
- html - 是否有可能将静态页面连接到我用 Django 制作的 web 应用程序?
- arrays - Mongoose - 查找数组没有任何匹配项的文档
- python - Python中的逃生通道
- java - 如何在使用 spark joinWith 创建 Tuple2 时修复 UnsupportedOperationException