236

我目前正在尝试显示用户的时间而不显示秒数。有没有办法使用 Javascript 的 .toLocaleTimeString() 来做到这一点?

做这样的事情:

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

将显示每个单位的用户时间,例如当前显示为下午 3:39:15。我是否能够显示相同的字符串,而无需秒?(例如下午 3:39)

4

12 回答 12

427

您可以随时设置选项,基于此页面您可以设置,以摆脱秒,像这样

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

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

于 2013-12-06T18:01:19.273 回答
38

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

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

它产生了以下输出:

2020 年 7 月 29 日下午 2:46

这正是我需要的东西。曾在火狐工作。

于 2020-07-29T18:50:38.253 回答
29

这对我有用:

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

于 2019-10-11T01:57:44.977 回答
10

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');
}
于 2013-07-28T22:49:43.370 回答
9

使用语言环境:

var date = new Date();
date.toLocaleTimeString('fr-FR', {hour: '2-digit', minute: '2-digit'})
于 2019-06-06T15:07:46.233 回答
3

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

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) - 在这种情况下我宁愿找不到匹配项并留下在这种情况下,时间格式化为秒。

于 2014-04-22T19:27:54.957 回答
0

带日期且小时无前导0

let d = new Date(2022, 2, 21, 7, 45, 0);
let s = d.toLocaleString([], { dateStyle: 'short', timeStyle: 'short' });
console.log(s);
// '2/21/22, 7:45 AM'

所有现代浏览器都支持这一点。

于 2022-02-21T17:08:16.060 回答
-3

你可以试试这个,它可以满足我的需要。

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

或者

d.toLocaleString().replace(/:\d{2}\s/,' ');
于 2015-10-09T06:56:06.377 回答
-4

这是一个可以执行此操作的函数,并带有解释说明的注释:

  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

于 2014-01-26T00:55:01.203 回答
-5

我认为最初的问题可以很容易地用迄今为止被忽略的东西来回答:一个简单的字符串拆分。返回的时间是一个文本字符串,只需将其拆分为“:”分隔符并按照您想要的方式重新组合字符串。没有插件,没有复杂的脚本。来吧:

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;
}
于 2014-10-01T22:37:49.017 回答
-6

尽管这是一个较老的问题,但我自己最近也有同样的问题,并提出了一个更简单的解决方案,使用正则表达式和字符串替换函数作为另一种选择(不需要外部 js 库或依赖 ECMAScript 内部化 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-like Locales。如果您还希望使用不使用 AM/PM 的英国英语 (en-GB) 获得类似的结果,则需要使用不同的正则表达式。

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

于 2014-10-06T07:27:10.050 回答
-7

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

let time = date.toLocaleTimeString();
console.log(time.substr(0, 4) + time.substr(7, 3))
//=> 5:45 PM
于 2018-01-10T15:58:01.830 回答