如何在JavaScript中仅获取当前时间

235

如何在JavaScript中获取当前时间并将其用于时间选择器?

我尝试使用var x = Date(),结果为:

Tue May 15 2012 05:45:40 GMT-0500

但我只需要当前时间,例如:05:45

如何将其赋值给一个变量?


19
因为我们希望这成为我们处理所有编程问题的首选信息源。也许有人有更好的解决方案,这样它们就可以全部列在一个地方作为参考。 - Alfred
33
@swati - 我知道你在三年前写了那个评论,但现在这个页面是谷歌搜索“get time part JavaScript”结果中排名第一的页面。请记住今天的问题就是明天的搜索结果。 - David Deutsch
3
“今天的问题就是明天的搜索结果” - Vaulstein
24个回答

298
var d = new Date("2011-04-20T09:30:51.01");
d.getHours(); // => 9
d.getMinutes(); // =>  30
d.getSeconds(); // => 51
或者
var d = new Date(); // for now
d.getHours(); // => 9
d.getMinutes(); // =>  30
d.getSeconds(); // => 51

2
var d = new Date("2011-04-20 09:30:51.01"); alert(d.getHours()); // => 9 输出 NaN - Chinmay235
1
@Chinmay235 加了个 T,现在是正确的通用 ISO 格式。顺便说一句,在 IE 中我只看到 undefined。不管怎样,已经修复了。 - Royi Namir

235

简短易懂:

new Date().toLocaleTimeString(); // 11:18:48 AM
//---
new Date().toLocaleDateString(); // 11/16/2015
//---
new Date().toLocaleString(); // 11/16/2015, 11:18:48 PM

四小时后(使用毫秒:sec == 1000):

new Date(new Date().getTime() + 4*60*60*1000).toLocaleTimeString(); // 3:18:48 PM or 15:18:48

两天前:

new Date(new Date().getTime() - 2*24*60*60*1000).toLocaleDateString() // 11/14/2015

9
加减法的计算方式很有帮助! - Dov Miller
如果我想要增加1分钟,我需要将它改成什么? - lets0code
这会在我测试过的所有浏览器中打印出“... GMT+0800(中国标准时间)”。你可能会说这与我的设置有关,但即使如此,我也只想使用一个命令(如果有的话)来显示HH:MM:SS。 - Xerix
如果我不需要时间结尾处的上午或下午,该怎么办? - Ritik Kamboj

107

使用JavaScript高效地获取和设置当前时间

我找不到完全符合我的需求的解决方案。我想要简洁而小巧的代码,所以我想出了这个方法:

纯JavaScript实现

function timeNow(i) {
  var d = new Date(),
    h = (d.getHours()<10?'0':'') + d.getHours(),
    m = (d.getMinutes()<10?'0':'') + d.getMinutes();
  i.value = h + ':' + m;
}
<a onclick="timeNow(test1)" href="#">SET TIME</a>
<input id="test1" type="time" value="10:40" />


更新

现在有足够的浏览器支持,可以直接使用toLocaleTimeString

对于html5类型的time,格式必须为hh:mm

function timeNow(i) {
  i.value = new Date().toLocaleTimeString([], {hour: '2-digit', minute:'2-digit'});
}
<a onclick="timeNow(test1)" href="#">SET TIME</a>
<input id="test1" type="time" value="10:40" />

在 jsfiddle 上试一试


3
我来晚了,感谢你的支持票 :) - DreamTeK
你是不是将“get”打成了“set”?如果不是,那么你的回答与你的标题不匹配,你的标题也与问题不匹配。 - anon
@QPaysTaxes 我的回答两者兼备。JavaScript 获取时间,HTML 显示用户如何使用代码设置时间(如果需要)。我已经更新了我的回答以反映这一点。感谢您指出。 - DreamTeK
时间对我来说晚了30分钟,如果我点击“设置时间”,它是正确的,但是使用军事时间。设置时间应该是切换猜测,但这不起作用。 - Ciasto piekarz
toLocaleTime 的格式会根据浏览器的语言环境而有所不同,但你可以使用一个固定的语言环境(如 fr)来获取与 HTML5 时间格式匹配的时间,而无需使用 PM/AM。示例代码:new Date().toLocaleTimeString('fr', {hour: '2-digit', minute:'2-digit'}); - Tofandel

35

您可以简单地使用这些方法。

console.log(new Date().toLocaleTimeString([], { hour: '2-digit', minute: "2-digit", hour12: false }));
console.log(new Date().toLocaleTimeString([], { hour: '2-digit', minute: "2-digit" }));


6
回答问题的一个简洁答案。 - Sushin Pv

30

尝试

new Date().toLocaleTimeString().replace("/.*(\d{2}:\d{2}:\d{2}).*/", "$1");

或者

new Date().toTimeString().split(" ")[0];

2
在第二种形式中,如果您仅使用toString()并将0更改为4,则还可以以HH:MM:SS格式获取仅时间。 - BigMac66

16

const date = Date().slice(16,21);
console.log(date);


10

你是指:

var d = new Date();
var curr_hour = d.getHours();
var curr_min = d.getMinutes();

7
function getCurrentTime(){
    var date = new Date();
    var hh = date.getHours();
    var mm = date.getMinutes();

    hh = hh < 10 ? '0'+hh : hh; 
    mm = mm < 10 ? '0'+mm : mm;

    curr_time = hh+':'+mm;
    return curr_time;
}

如果您只需要不带秒的时间且不需要PM或AM部分,则上述代码应该完美地运行。 - Hamfri

7

试试这个:

var date = new Date();
var hour = date.getHours();
var min = date.getMinutes();

6

试一下

new Date().toTimeString().slice(0, 8);

或者
new Date().toTimeString().split(" ")[0];

应该可以正常工作。


相当简单且是一个很好的解决方案。继续保持良好的工作。 - Sachin Shah

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接