我目前试图显示用户的时间而不显示秒。是否有一种方法,我可以这样做使用Javascript的.toLocaleTimeString()?

做这样的事情:

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

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


当前回答

由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 dateWithouthSecond = new Date();
dateWithouthSecond.toLocaleTimeString([], {hour: '2-digit', minute:'2-digit'});

支持Firefox、Chrome、IE9+和Opera。在你的web浏览器控制台试试。

使用locale:

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”的内容,那么它一定是带秒的时间,我删除了最后一部分,如果我没有找到这个模式,什么都没有改变。相当安全,但在一些奇怪的情况下,有可能会留下几秒钟。

我只是希望没有locale会改变格式化时间部分的顺序(例如,使它ss:mm:hh)。这个从左到右的标记让我有点紧张,这就是为什么我不删除从右到左的标记(\u202E) -我更喜欢在这种情况下不找到匹配,在这种情况下让时间格式化为秒。

我想让它有日期和时间,但没有秒,所以我用了这个:

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

它产生了以下输出:

2020年7月29日,下午2:46

这正是我所需要的。使用过FireFox。

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