如何使用.toLocaleTimeString()而不显示秒?

我目前正在尝试显示用户的时间而不显示秒数。 有没有一种方法,我可以使用JavaScript的.toLocaleTimeString()?

做这样的事情:

var date = new Date(); var string = date.toLocaleTimeString(); 

将显示用户的时间与每个单位,例如目前它显示3:39:15 PM。 我能显示相同的string,只是没有秒? (例如3:39 PM)

你可以随时设置选项,基于你可以设置的这个页面 ,摆脱秒,像这样的东西

 var dateWithouthSecond = new Date(); dateWithouthSecond.toLocaleTimeString([], {hour: '2-digit', minute:'2-digit'}); 

支持Firefox,Chrome,IE9 +和Opera。 在您的networking浏览器控制台上试试。

由Date.prototype.toLocaleString返回的值是依赖于实现的,所以你得到你所得到的。 您可以尝试parsingstring来移除秒,但是在不同的浏览器中可能会有所不同,所以您需要为每个正在使用的浏览器留出余地。

使用Date方法创build自己的,明确的格式并不困难。 例如:

 function formatTimeHHMMA(d) { function z(n){return (n<10?'0':'')+n} var h = d.getHours(); return (h%12 || 12) + ':' + z(d.getMinutes()) + ' ' + (h<12? 'AM' :'PM'); } 

我也一直在寻找解决这个问题的方法,下面是我最终想到的:

 function getTimeStr() { var dt = new Date(); var d = dt.toLocaleDateString(); var t = dt.toLocaleTimeString(); t = t.replace(/\u200E/g, ''); t = t.replace(/^([^\d]*\d{1,2}:\d{1,2}):\d{1,2}([^\d]*)$/, '$1$2'); var result = d + ' ' + t; return result; } 

你可以在这里尝试: http : //jsfiddle.net/B5Zrx/

\ u200E是一些格式化的字符,我已经看到了一些IE版本(这是Unicode字符从左到右的标记)。

我假设如果格式化的时间包含“XX:XX:XX”之类的东西,那么它必须是时间和秒,我删除最后一部分,如果我没有find这种模式,没有什么改变。 非常安全,但在某些奇怪的情况下会有秒钟的风险。

我只是希望没有语言环境可以改变格式化的时间部分的顺序(例如使其成为ss:mm:hh)。 这个从左到右的标记让我对此有点紧张,这就是为什么我不删除从右到左的标记(\ u202E) – 我宁愿在这种情况下找不到匹配,并离开时间格式化在这种情况下秒。

你可以试试这个,这是为我的需求工作。

 var d = new Date(); d.toLocaleTimeString().replace(/:\d{2}\s/,' '); 

要么

 d.toLocaleString().replace(/:\d{2}\s/,' '); 

我认为原来的问题可以很容易地回答到目前为止被忽略的一些东西:一个简单的string拆分。 返回的时间是一个文本string,只需将其分割到“:”分隔符处,然后按照需要重新组合string即可。 没有插件,没有复杂的脚本。 在这里你去:

 var myVar=setInterval(function(){myTimer()},1000); function myTimer() { var d = new Date(); currentNow = d.toLocaleTimeString(); nowArray = currentNow.split(':'); filteredNow = nowArray[0]+':'+nowArray[1]; document.getElementById("demo").innerHTML = filteredNow; } 

尽pipe这是一个老问题,但最近我自己也有一个相同的问题,并提出了一个更简单的解决scheme,使用正则expression式和stringreplace函数作为另一种替代方法(不需要外部js库或依赖ECMAScript内部化API) :

 var d = new Date(); var localeTime = d.toLocaleTimeString(); var localeTimeSansSeconds = localeTime.replace(/:(\d{2}) (?=[AP]M)/, " "); 

这种方法使用正则expression式预先获取string的AM AM / PM末尾,并用空格replace:ss部分,而不改变string的其余部分。 (字面意思是“用两个数字和一个空格后面跟着上午或下午,并用空格replace冒号,两个数字和空格部分的冒号。

这种expression/方法只适用于en-US和en-US-like的Locales。 如果您还想要与英文英文(en-GB)(不使用AM / PM)类似的结果,则需要使用不同的正则expression式。

根据原始提问者的样本输出结果,我假定他们主要处理美国观众和美国时间模式。

这里有一个function,将解释:

  function displayNiceTime(date){ // getHours returns the hours in local time zone from 0 to 23 var hours = date.getHours() // getMinutes returns the minutes in local time zone from 0 to 59 var minutes = date.getMinutes() var meridiem = " AM" // convert to 12-hour time format if (hours > 12) { hours = hours - 12 meridiem = ' PM' } else if (hours === 0){ hours = 12 } // minutes should always be two digits long if (minutes < 10) { minutes = "0" + minutes.toString() } return hours + ':' + minutes + meridiem } 

正如其他人所指出的那样,toLocaleTimeString()可以在不同的浏览器中以不同的方式实现,这样可以更好地控制。

要了解更多关于Javascriptdate对象,这是一个很好的资源: https : //developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date