Answers:
您始终可以根据此页面设置选项,以摆脱秒表,例如:
var dateWithouthSecond = new Date();
dateWithouthSecond.toLocaleTimeString([], {hour: '2-digit', minute:'2-digit'});
受Firefox,Chrome,IE9 +和Opera支持。在您的Web浏览器控制台上尝试一下。
hour: "2-digit"
,我无法在Chrome 42和FF 37中为我工作- 两者都d = new Date(1429524912495).toLocaleTimeString('en-US', {hour: '2-digit', minute: '2-digit', hour12: true})
返回"6:15 AM"
。
[]
省略特定的语言环境。这样,您就可以保留在用户所在的语言环境中:toLocaleTimeString([], {hour: '2-digit', minute: '2-digit'}
new Date().toLocaleTimeString([], {hour: '2-digit', minute:'2-digit', hour12: false}); "17:08"
这对我有用:
var date = new Date();
var string = date.toLocaleTimeString([], {timeStyle: 'short'});
Date.prototype.toLocaleString返回的值取决于实现,因此您可以得到所得到的。您可以尝试解析字符串以删除秒数,但是在不同的浏览器中它可能有所不同,因此您需要为使用中的每个浏览器留出余地。
使用Date方法创建自己明确的格式并不困难。例如:
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');
}
使用语言环境:
var date = new Date();
date.toLocaleTimeString('fr-FR', {hour: '2-digit', minute: '2-digit'})
我也一直在寻找解决这个问题的方法,这是我最终想到的:
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”之类的内容,那么时间必须是秒,并且我删除了最后一部分,如果找不到该模式,则什么都不会改变。相当安全,但是在某些奇怪的情况下有留下几秒钟的风险。
我只希望没有可以更改格式化时间部分顺序的语言环境(例如,使其为ss:mm:hh)。这个从左到右的标记让我对此有些不安,这就是为什么我不删除从右到左的标记(\ u202E)-在这种情况下,我宁愿找不到匹配项并留下在这种情况下,时间格式以秒为单位。
toLocaleTimeString()
对于在所有语言环境下可能都不正确的返回值做出了很多假设。
这是一个将执行此功能的函数,并带有解释说明的注释:
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()可以在不同的浏览器中以不同方式实现,因此这种方式可以提供更好的控制。
要了解有关Javascript Date对象的更多信息,这是一个很好的资源:https : //developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date
我认为,最初的问题很容易解决,而到目前为止却被忽略了:简单的字符串拆分。返回的时间是一个文本字符串,只需在“:”定界符上将其分割,然后按照所需的方式重新组装该字符串。没有插件,没有复杂的脚本。和你去:
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;
}
尽管这是一个比较老的问题,但我本人最近也遇到了同样的问题,并提出了一个使用正则表达式和字符串替换函数作为另一种选择的更简单的解决方案(不需要外部js库或依赖ECMAScript Internalization API) :
var d = new Date();
var localeTime = d.toLocaleTimeString();
var localeTimeSansSeconds = localeTime.replace(/:(\d{2}) (?=[AP]M)/, " ");
这种方法使用正则表达式预读来捕获字符串的:ss AM / PM末尾,并用空格替换:ss部分,使其余的字符串保持不变。(从字面上说:“用两个数字和一个空格(后面跟AM或PM)查找冒号,并用一个空格替换冒号,两个数字和空格部分)。
此表达式/方法仅适用于en-US和类似en-US的语言环境。如果您还希望使用不使用AM / PM的英式英语(en-GB)获得类似的结果,则需要使用其他正则表达式。
基于原始提问者的样本输出,我认为他们主要是在与美国受众和美国时间架构打交道。
只需将日期转换为字符串,然后将所需的子字符串连接起来即可。
let time = date.toLocaleTimeString();
console.log(time.substr(0, 4) + time.substr(7, 3))
//=> 5:45 PM
toLocaleTimeString
根据区域设置,在每个浏览器上返回不同的字符串。您不能依靠这些位置,在其他人的浏览器上会得到不同的结果,可能是坏的结果。