如何更改<input>的时间格式(12/24小时)?


72

我正在使用HTML5输入元素type=time。问题是它显示时间,12 hours但我希望它显示24 hours一天。我怎样才能达到24小时?

这是我的输入字段:

<input type="time" name="time" placeholder="hrs:mins" pattern="^([0-1]?[0-9]|2[0-4]):([0-5][0-9])(:[0-5][0-9])?$" class="inputs time" required>


2
在Chrome上打开错误:bugs.chromium.org/p/chromium/issues/detail?id=263320。请投票:)
小马驹

2
在Firefox上打开错误:bugzilla.mozilla.org/show_bug.cgi?id=1425218。它表示:status-firefox59:---→wontfix / status-firefox60:---→受影响的/ status-firefox61:---→受影响的/ status-firefox-esr52:---不受影响
Dennis Hendriks

@DennisHendriks,这是此错误中提到的解决方案,它为Firefox解决了我的问题:我们需要intl.regional_prefs.use_os_locales在about:config中将其设置为true。这将遵循操作系统的语言环境,并根据您的设置使用类似DD / MM / YYYY的日期,而不是MM / DD / YYYY。
baptx'4

@baptx是的,我看到了。这个对我有用。
丹尼斯·亨德里克斯

实际上,@ DennisHendriks在Linux上,通过LC_TIME=C.UTF-8在/ etc / default / locale中使用,我们甚至不需要将其设置intl.regional_prefs.use_os_locales为true。可能与此雷鸟错误有关:bugzilla.mozilla.org/show_bug.cgi?
id=1426907#c155

Answers:


64

HTML5时间输入

这是与日期/时间相关的类型中最简单的一种,它允许用户通常在用户的操作系统区域设置下选择24/12小时制的时间。返回的值为24hhours:minutes格式,类似于14:30

有关更多详细信息,包括每个浏览器的外观,请参见 MDN

<input type="time" name="time" />


22
它无法像您在最新版本的chrome中所说的那样工作。jsfiddle
Om3ga 2012年

23
让我感到困惑的是,浏览器在2016
Nick Shvelidze

3
@PraveenKumar:在2016年7月,Firefox或Internet Explorer仍然不提供支持。
递归

3
@recursive他们甚至是浏览器吗?
Praveen Kumar Purushothaman

3
令人惊奇的是,经过这么多时间,无数能够编译javascript的编译器,等等,我们仍然在处理如此糟糕的浏览器情况。深不可测。在Safari中尝试时间。除非可以确保所有用户都使用同一浏览器,否则您不能使用它。
诺伯特·诺伯森

28

通过HTML5草案,input type=time为一天中的时间输入创建控件,该控件预计将使用“用户的首选演示文稿”实现。但这确实意味着要使用一个小部件,其中时间的显示应遵循浏览器语言环境的规则。因此,与周围内容的语言无关,表示形式随浏览器的语言,底层操作系统的语言或系统范围的区域设置(取决于浏览器)而变化。例如,使用芬兰语版本的Chrome,我将小部件视为使用标准的24小时制。您的里程会有所不同。

因此,input type=time基于一个本地化的想法,该想法使所有这些工作都不受页面作者的控制。这是故意的;这个问题已经在HTML5讨论中多次提出,结果是:没有变化。(除了可能在文本中添加了说明,使这种行为按预期进行了描述。)

请注意,中不允许使用patternplaceholder属性input type=time。并且placeholder="hrs:mins",如果实施,可能会引起误解。当浏览器区域设置使用“。”时,很有可能用户必须键入12.30(带句点)而不是12:30。作为时代的分隔符。

我的结论是,您应该使用input type=text带有pattern属性的,以及一些JavaScript,这些JavaScript会在pattern本身不支持该属性的浏览器上检查输入的正确性。


1
此外,您可以添加maxlength属性并将其固定为5,还可以限制字段大小以提示它。
Christophe Roussy 2015年

1
现在,HTML5草案的链接已断开,请尝试使用w3.org/TR/html-markup/input.time.html
dmiller309 '16

我的Firefox浏览器出于某种原因以12小时格式显示时间,尽管Windows设置为使用24小时。而且我找不到更改为24小时格式的选项。---非常奇怪的决定,如果只有页面创建者知道要创建页面的区域,则不允许页面创建者设置时间格式。
安德烈(Andrei)

12

它取决于您的语言环境系统时间设置,先设置24小时,然后它将显示24小时。


20
我无法确认。运行Windows 10,该窗口在通知区域中显示24小时内的时间,但是我仍然在输入type =“ time”上看到一个AM / PM选择器。经过Chrome和Edge测试。
Jan Aagaard

2
它取决于浏览器的语言环境,而不是系统的语言环境。
Episodex

11

这取决于启动Web浏览器时用户操作系统的时间格式。

所以:

  • 如果将计算机的系统偏好设置为使用24小时制,则浏览器会将<input type="time">元素呈现为--:--(时间范围:00:00–23:59)。
  • 如果将计算机的系统偏好设置更改为使用12个小时,则在退出并重新启动浏览器之前,输出不会更改。然后它将更改为--:-- --(时间范围:12:00 AM – 11:59 PM)。

并且(在撰写本文时),浏览器支持仅为75%(caniuse)。是:Edge,Chrome,Opera,Android。Boo:IE,Firefox,Safari)。


13
我不是这样,我的计算机可以使用24h格式,但是我的Chrome浏览器可以使用pm / am格式
Mehdi Souregi,

3

如果您能够/愿意使用一个很小的组件,那么我可以编写此Timepicker — https://github.com/jonataswalker/timepicker.js,我可以根据自己的需要。

用法是这样的:

var timepicker = new TimePicker('time', {
  lang: 'en',
  theme: 'dark'
});

var input = document.getElementById('time');

timepicker.on('change', function(evt) {
  
  var value = (evt.hour || '00') + ':' + (evt.minute || '00');
  evt.element.value = value;

});
body {
  font: 1.2em/1.3 sans-serif;
  color: #222;
  font-weight: 400;
  padding: 5px;
  margin: 0;
  background: linear-gradient(#efefef, #999) fixed;
}
input {
  padding: 5px 0;
  font-size: 1.5em;
  font-family: inherit;
  width: 100px;
}
<script src="http://cdn.jsdelivr.net/timepicker.js/latest/timepicker.min.js"></script>
<link href="http://cdn.jsdelivr.net/timepicker.js/latest/timepicker.min.css" rel="stylesheet"/>

<div>
  <input type="text" id="time" placeholder="Time">
</div>


还不可能。
Jonatas Walker

1
那么这如何回答这个问题呢?
斯蒂芬·R

“我怎么能做到24小时?” 这个?
Jonatas Walker

1

这种类型的支持仍然很差。Opera会以您想要的方式显示它。Chrome 23会以秒和AM / PM来显示它,在24版本(此时为dev分支)中,它将掉秒(如果可能),但没有关于AM / PM的信息。
它不是您可能想要的,但在这一点上,我看到实现时间选择器格式的唯一选择是使用javascript。



0

即使您以HH:MM AM / PM格式查看时间,但在后端仍可以24小时制运行,但您可以尝试使用一些基本的JavaScript来查看。



-2

您可以尝试使用HTML端

<label for="appointment-time">Choose Time</label>
<input class="form-control" type="time" ng-model="time" ng-change="ChangeTime()" />
<label class="form-control" >{{displayTime}}</label>

JavaScript端

function addMinutes(time/*"hh:mm"*/, minsToAdd/*"N"*/) 
{
        function z(n)
        {
           return (n<10? '0':'') + n;
        }
        var bits = time.split(':');
        var mins = bits[0]*60 + (+bits[1]) + (+minsToAdd);
        return z(mins%(24*60)/60 | 0) + ':' + z(mins%60); 
 }  

 $scope.ChangeTime=function()
 {
      var d = new Date($scope.time);
      var hours=d.getHours();
      var minutes=Math.round(d.getMinutes());
      var ampm = hours >= 12 ? 'PM' : 'AM';
      var Time=hours+':'+minutes;
      var DisplayTime=addMinutes(Time, duration);
      $scope.displayTime=Time+' - '+DisplayTime +' '+ampm;
 }

2
这如何回答这个问题?
拉扎尔(LazarLjubenović)

-2

简单的HTML技巧就可以做到这一点:

<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" rel="stylesheet"/>
<div class="row" >
                       
                        <div class="col-md-6">
                             <div class="row">
                                <div class="col-md-4" >
                                       <label for="hours">Hours</label>
          <select class="form-control" required>
                <option>  </option>
                <option value="1"> 1 </option>
                <option value="2"> 2 </option>
                <option value="3"> 3 </option>
                <option value="4"> 4 </option>
                <option value="5"> 5 </option>
                <option value="6"> 6 </option>
                <option value="7"> 7 </option>
                <option value="8"> 8 </option>
                <option value="9"> 9 </option>
                <option value="10"> 10 </option>
                <option value="11"> 11 </option>
                <option value="12"> 12 </option>
              </select>
             </div>
                <div class="col-md-4" >
                      <label for="minutes">Minutes</label>
              <select class="form-control" required="">
                <option selected disabled>  </option>
                <option value="00"> 00 </option>
                <option value="10"> 10 </option>
                <option value="20"> 20 </option>
                <option value="30"> 30 </option>
                <option value="40"> 40 </option>
                <option value="50"> 50 </option>
              </select>
             </div>
                 <div class="col-md-4" >
                       <label for="hours">Select Meridiem</label>
              <select class="form-control" required="" >
                <option selected="" value="AM"> AM </option>
                <option value="PM"> PM </option>
              </select>
              </div>
             </div></div>
                    </div>

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.