JavaScript来确定浏览器是否使用12小时或24小时格式显示时间输入

JavaScript来确定浏览器是否使用12小时或24小时格式显示时间输入,javascript,input,time,locale,Javascript,Input,Time,Locale,我想确定浏览器如何显示时间输入: <input type="time"> 附加说明:我在英国,在Windows 10上使用24小时制。浏览器反映24小时系统偏好;JavaScript时间字符串不支持。当我更改为12小时格式(并重新启动)时,更改仅由Chrome应用。JavaScript示例中的值保持不变。我读过,但它只是显示了不一致 基本上,我只想知道浏览器显示的是哪一个。就这样 如果这是不可能的,强制输入使用24小时格式显示将是另一种选择。我终于理解了您的实际

我想确定浏览器如何显示时间输入:

<input type="time">
附加说明:我在英国,在Windows 10上使用24小时制。浏览器反映24小时系统偏好;JavaScript时间字符串不支持。当我更改为12小时格式(并重新启动)时,更改仅由Chrome应用。JavaScript示例中的值保持不变。我读过,但它只是显示了不一致

基本上,我只想知道浏览器显示的是哪一个。就这样


如果这是不可能的,强制输入使用24小时格式显示将是另一种选择。

我终于理解了您的实际问题

在Chrome/Opera中,时间控制很简单,根据操作系统区域设置,插槽可以12小时或24小时格式输入小时和分钟,上下箭头可以增减当前选定的组件。在某些版本中,提供了一个“X”按钮来清除控件的值


Firefox的时间控制与Chrome非常相似,只是它没有上下箭头。它还根据系统区域设置使用12小时或24小时格式输入时间。“X”按钮用于清除控件的值


[先假设边,后假设边]

边缘时间控制有点复杂,打开了一个小时和分钟选择器与滑动卷轴。它与Chrome一样,根据系统区域设置,使用12或24小时格式输入时间:

那么这也许能回答你的问题

const t=document.createElement(“输入”)
t、 type=“时间”
t、 value=“15:00”
document.body.appendChild(t)
console.log(t.offsetWidth);
常量宽度=getComputedStyle(t).getPropertyValue(“宽度”)
控制台日志(宽度)
/*

我终于明白了你的实际问题

在Chrome/Opera中,时间控件很简单,根据操作系统区域设置,插槽可以12小时或24小时格式输入小时和分钟,上下箭头可以增加或减少当前选择的组件。在某些版本中,提供了“X”按钮来清除控件的值


Firefox的时间控件与Chrome非常相似,只是它没有上下箭头。它还根据系统区域设置使用12或24小时格式输入时间。提供了一个“X”按钮来清除控件的值


[先假设边,后假设边]

边缘时间控件更为复杂,它打开了一个带有滑动卷轴的小时和分钟选择器。它与Chrome一样,根据系统区域设置,使用12或24小时格式输入时间:

那么这也许能回答你的问题

const t=document.createElement(“输入”)
t、 type=“时间”
t、 value=“15:00”
document.body.appendChild(t)
console.log(t.offsetWidth);
常量宽度=getComputedStyle(t).getPropertyValue(“宽度”)
控制台日志(宽度)
/*

对于(设i=0;i这里是我通过结合@mplungjan的第一个解决方案和@CBroe检查输入宽度的建议得出的解决方案:

var local_time_string=(/chrom(e|ium)/i.test(navigator.userAgent)和&!/msie | edge/i.test(navigator.userAgent))?false:(新日期(2020,4,8,18,0,0,0).toLocaleTimeString()),
小时格式=(本地时间字符串的类型='string')?((parseInt(本地时间字符串)==18)?24:12):空;
如果(小时格式==null){
$(“#父元素”).append(“”);
hour#u格式=($('#时间测试').width()<81)?24:12;
$(“#时间测试”).remove();
}
console.log(小时格式);

以下是我通过结合@mplungjan的第一个解决方案和@CBroe检查输入宽度的建议得出的解决方案:

var local_time_string=(/chrom(e|ium)/i.test(navigator.userAgent)和&!/msie | edge/i.test(navigator.userAgent))?false:(新日期(2020,4,8,18,0,0,0).toLocaleTimeString()),
小时格式=(本地时间字符串的类型='string')?((parseInt(本地时间字符串)==18)?24:12):空;
如果(小时格式==null){
$(“#父元素”).append(“”);
hour#u格式=($('#时间测试').width()<81)?24:12;
$(“#时间测试”).remove();
}
console.log(小时格式);

可能对你的问题有用,我想它可能会回答同样的问题

如果您需要将时间格式中包含的PM字符串转换为24小时,例如“06:45:05PM”,您可以使用此代码

function deletePMAMAndChangeTo24Hour(s){

return s.substr(s.length -2) !== "PM" && s.slice(0,-2).split(':')[0]==12
    ?s.slice(0,-2).replace(s.slice(0,-2).split(':')[0],'00')
    :s.substr(s.length -2) !== "AM" && parseInt(s.slice(0,-2).split(':')[0])<12 
    ?s.slice(0,-2).replace(
        s.slice(0,-2).split(':')[0],
    parseInt(s.slice(0,-2).split(':')[0]) + 12
    )
    :s.slice(0,-2)
}

const changedTime = deletePMAMAndChangeTo24Hour('07:05:45PM')
功能删除PMA并更改为24小时{
返回s.substr(s.length-2)!=“PM”和&s.slice(0,-2)。拆分(“:”)[0]==12
?s.slice(0,-2).替换(s.slice(0,-2).拆分(':')[0],'00'))

:s.substr(s.length-2)!=“AM”和&parseInt(s.slice(0,-2)。split(“:”)[0])可能对您的问题有用,我认为它可能会回答相同的问题

如果您需要将时间格式中包含的PM字符串转换为24小时,例如“06:45:05PM”,您可以使用此代码

function deletePMAMAndChangeTo24Hour(s){

return s.substr(s.length -2) !== "PM" && s.slice(0,-2).split(':')[0]==12
    ?s.slice(0,-2).replace(s.slice(0,-2).split(':')[0],'00')
    :s.substr(s.length -2) !== "AM" && parseInt(s.slice(0,-2).split(':')[0])<12 
    ?s.slice(0,-2).replace(
        s.slice(0,-2).split(':')[0],
    parseInt(s.slice(0,-2).split(':')[0]) + 12
    )
    :s.slice(0,-2)
}

const changedTime = deletePMAMAndChangeTo24Hour('07:05:45PM')
功能删除PMA并更改为24小时{
返回s.substr(s.length-2)!=“PM”和&s.slice(0,-2)。拆分(“:”)[0]==12
?s.slice(0,-2).替换(s.slice(0,-2).拆分(':')[0],'00'))

:s.substr(s.length-2)!=“AM”和&parseInt(s.slice(0,-2).拆分(“:”)[0])如果无法通过检查浏览器用于显示本地格式时间的格式来可靠地实现这一点,那么可以改为查询实际输入字段的宽度?好的,这可以通过宽度方法解决。Chrome是一种复杂的浏览器,因此对时间输入元素的宽度执行检查会返回:65 px表示24小时格式t和92 px表示12小时格式。这与字符串检查相结合应该足够准确。“已解决”。如果无法通过检查浏览器用于显示本地格式时间的格式来可靠地解决这一问题,可以改为查询实际输入字段的宽度?好的,这是使用宽度方法解决的。