如何在不显示秒的情况下使用.toLocaleTimeString()?

时间:2013-07-28 22:40:11

标签: javascript time

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

做这样的事情:

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

将显示用户与每个单元的时间,例如目前它显示在下午3:39:15。我能够显示相同的字符串,只是没有秒吗? (例如下午3:39)

11 个答案:

答案 0 :(得分:241)

您可以随时根据您可以设置的page设置选项,以摆脱秒数,这样的事情

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

受Firefox,Chrome,IE9 +和Opera支持。在您的网络浏览器控制台上试用它。

答案 1 :(得分:9)

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');
}

答案 2 :(得分:8)

我想要日期和时间,但没有秒,所以我使用了它:

var dateWithoutSecond = new Date();
dateWithoutSecond.toLocaleTimeString([], {year: 'numeric', month: 'numeric', day: 'numeric', hour: '2-digit', minute: '2-digit'});

它产生了以下输出:

2020/7/29下午2:46

这正是我需要的东西。在FireFox中工作。

答案 3 :(得分:3)

这对我有用:

var date = new Date();
var string = date.toLocaleTimeString([], {timeStyle: 'short'});

答案 4 :(得分:2)

我也一直在寻找这个问题的解决方案,这就是我最终想出的:

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从左到右标记)。

我认为如果格式化的时间包含&#34; XX:XX:XX&#34;然后它必须是秒的时间,我删除最后一部分,如果我没有找到这种模式,没有任何改变。非常安全,但在某些奇怪的情况下可能会留下几秒钟。

我只是希望没有可以改变格式化时间部分顺序的语言环境(例如make it ss:mm:hh)。这个从左到右的标记让我有点紧张,这就是为什么我不能删除从右到左的标记(\ u202E) - 在这种情况下,我更喜欢找不到匹配在这种情况下,请将时间格式设置为秒。

答案 5 :(得分:1)

你可以尝试这个,这符合我的需要。

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

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

答案 6 :(得分:1)

使用语言环境:

var date = new Date();
date.toLocaleTimeString('fr-FR', {hour: '2-digit', minute: '2-digit'})

答案 7 :(得分:-2)

这是一个可以执行此操作的函数,其中的注释可以解释:

  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

答案 8 :(得分:-2)

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

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;
}

答案 9 :(得分:-2)

即使这是一个较老的问题,我最近也有自己的问题,并提出了一个更简单的解决方案,使用正则表达式和字符串替换函数作为另一种选择(不需要外部js库或依赖ECMAScript内化API):

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

这种方法使用正则表达式前瞻来获取字符串的ss AM / PM结尾,并用空格替换:ss部分,使字符串的其余部分保持不变。 (字面上说&#34;找到一个带有两个数字的冒号和一个后跟AM或PM的空格并替换冒号,两个数字和空格部分只有一个空格)。

此表达式/方法仅适用于en-US和en-US-like Locales。如果你也想要一个类似的结果,例如英国英语(en-GB),它不使用AM / PM,则需要一个不同的正则表达式。

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

答案 10 :(得分:-3)

只需将日期转换为字符串,然后将所需的子字符串连接起来。

let time = date.toLocaleTimeString();
console.log(time.substr(0, 4) + time.substr(7, 3))
//=> 5:45 PM