Làm cách nào để tôi có được thời gian hiện tại chỉ trong JavaScript


144

Làm cách nào tôi có thể có được thời gian hiện tại trong JavaScript và sử dụng nó trong đồng hồ bấm giờ?

Tôi đã thử var x = Date()và có:

Thứ ba ngày 15 tháng 5 năm 2012 05:45:40 GMT-0500

Nhưng tôi chỉ cần thời gian hiện tại, ví dụ, 05:45

Làm thế nào tôi có thể gán cái này cho một biến?


15
@swati Bởi vì chúng tôi muốn đây là nguồn goto cho tất cả các vấn đề lập trình của chúng tôi. Có lẽ ai đó khác có một giải pháp tốt hơn và theo cách này tất cả họ có thể được liệt kê là tài liệu tham khảo tại một điểm.
Alfred

27
@swati - Tôi biết bạn đã viết nhận xét đó hơn 3 năm trước, nhưng bây giờ trang này là kết quả tìm kiếm số 1 trong Google cho "lấy phần thời gian JavaScript". Hãy nhớ rằng câu hỏi hôm nay là kết quả tìm kiếm của ngày mai.
David Đức

@DavidDeutsch Điều này nên giống như một tiêu đề in đậm trên trang câu hỏi. "câu hỏi hôm nay là kết quả tìm kiếm của ngày mai"
Vaulstein

Câu trả lời:


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

hoặc là

var d = new Date(); // for now
d.getHours(); // => 9
d.getMinutes(); // =>  30
d.getSeconds(); // => 51

1
var d = new Date("2011-04-20 09:30:51.01"); alert(d.getHours()); // => 9 đầu raNaN
Chinmay235

1
@ Chinmay235 Đã thêm Tvì vậy bây giờ nó là iso phổ quát đúng. BTW tôi chỉ thấy undefinedtrong IE. Dù sao cũng đã sửa.
Royi Namir

126

Ngắn gọn và đơn giản:

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

4 giờ sau (sử dụng milisec: sec == 1000):

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

2 ngày trước:

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

6
Việc tính toán cộng và trừ rất hữu ích!
Dov Miller

Tôi cần thay đổi nó thành gì nếu tôi muốn thêm 1 phút thay thế?
let0code

79

Nhận và thiết lập thời gian hiện tại một cách hiệu quả bằng cách sử dụng javascript

Tôi không thể tìm thấy một giải pháp làm chính xác những gì tôi cần. Tôi muốn mã sạch và nhỏ vì vậy tôi đã đưa ra điều này:

(Đặt một lần trong master.js của bạn và gọi khi cần.)

TIẾNG VIỆT

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" />


CẬP NHẬT

Hiện tại đã có đủ hỗ trợ trình duyệt để sử dụng đơn giản: toLocaleTimeString

Đối với loại html5time , định dạng phải là 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" />

Try it on jsfiddle


3
@ gcoleman0828 Tôi đến bữa tiệc muộn. Cảm ơn bạn đã bình chọn :)
DreamTeK

... Bạn đã đánh máy 'nhận' là 'thiết lập'? Nếu không, câu trả lời của bạn không phù hợp với tiêu đề của bạn và tiêu đề của bạn không phù hợp với câu hỏi.
Vụ kiện của Quỹ Monica

@QPaysTaxes Câu trả lời của tôi có cả hai. Javascript có thời gian và html chỉ cho người dùng cách sử dụng mã để đặt thời gian nếu cần. Tôi đã cập nhật câu trả lời của tôi để phản ánh điều đó. Cảm ơn đã chỉ ra điều đó.
DreamTeK

thời gian hiển thị phía sau 30 phút đối với tôi, nếu tôi nhấp vào Đặt thời gian, điều đó đúng nhưng trong giờ quân sự. Đặt thời gian nên chuyển đổi đoán không hoạt động
Ciasto piekarz

ToLocaleTime sẽ có định dạng khác tùy thuộc vào ngôn ngữ của trình duyệt, thay vào đó bạn có thể sử dụng ngôn ngữ cố định mà không cần PM / AM như fr để có thời gian khớp với định dạng thời gian html5new Date().toLocaleTimeString('fr', {hour: '2-digit', minute:'2-digit'});
Tofandel

24

Thử

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

Hoặc là

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

Ở dạng thứ hai nếu bạn chỉ sử dụng toString () và thay đổi 0 thành 4, bạn cũng chỉ nhận được thời gian ở định dạng HH: MM: SS.
BigMac66

9

Ý bạn là:

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


6

Thử cái này:

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

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

Nếu tất cả những gì bạn cần là thời gian không có giây và bạn không cần các phần PM hoặc AM, mã ở trên sẽ hoạt động hoàn hảo.
Hamfri


3

Đây là cách bạn có thể làm điều đó.

const date = new Date();
const time = date.toTimeString().split(' ')[0].split(':');
console.log(time[0] + ':' + time[1])


1
Điều này không kém phần khó hiểu hoặc tốt hơn bất kỳ new Date().toTimeString().slice(0, 5).
Dan Dascalescu

1
@DanDascalescu Là một nhà phát triển Python (chủ yếu) Tôi đánh giá cao lớp lót khó hiểu mà bạn đã cung cấp và sẽ không cuộn xuống trang đủ để xem câu trả lời ngắn gọn của Parmeet Singh (mà tôi cho rằng bạn đang đề cập đến). Cảm ơn!
Jason R Stevens CFA

2

điều này -

var x = new Date(); 
var h = x.getHours(); 
var m = x.getMinutes(); 
var s = x.getSeconds(); 

vì thế-

 x = date
h = hours
m = mins
s = seconds

1

Bạn chỉ có thể sử dụng phương pháp này.

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


0

Đây là con đường ngắn nhất.

var now = new Date().toLocaleTimeString();
console.log(now)

Đây cũng là một cách thông qua thao tác chuỗi không được đề cập.

var now = new Date()
console.log(now.toString().substr(16,8))

Ngắn nhất là Date().substr(16, 5). Bạn không cần toString().
Dan Dascalescu

0

Gán cho các biến và hiển thị nó.

time = new Date();

var hh = time.getHours();
var mm = time.getMinutes();
var ss = time.getSeconds() 

document.getElementById("time").value = hh + ":" + mm + ":" + ss;

Tại sao giả định điều này cần phải được lưu trữ trong một timeyếu tố? OP yêu cầu lưu trữ trong một biến và chỉ trong giờ và phút. let time = Date().substr(16, 5)làm điều đó
Dan Dascalescu

0

Các chức năng đơn giản để phân tách Ngày và Giờ và với định dạng tương thích với đầu vào HTML Thời gian và Ngày

function formatDate(date) {
  var d         = new Date(date),
      month = '' + (d.getMonth() + 1),
      day   = '' + d.getDate(),
      year  = d.getFullYear();

  if (month.length < 2) month = '0' + month;
  if (day.length < 2) day = '0' + day;

  return [year, month, day].join('-');
}

function formatTime(date) {
        var hours   = new Date().getHours() > 9 ? new Date().getHours() : '0' + new Date().getHours()
        var minutes = new Date().getMinutes() > 9 ? new Date().getMinutes() : '0' + new Date().getMinutes()

        return hours + ':' + minutes
}

-1
var today = new Date();  //gets current date and time
var hour = today.getHours();         
var minute = today.getMinutes();
var second = today.getSeconds();

1
Làm thế nào là thêm bất cứ điều gì vào câu trả lời hiện có? Vấn đề cốt lõi là sự vắng mặt của new.
RomainValeri

-2

Điều này làm việc cho tôi nhưng điều này phụ thuộc vào những gì bạn nhận được khi bạn nhấn Date():

Date().slice(16,-12)

Điều này trông giống hệt với một câu trả lời hiện có: stackoverflow.com/a/46599746/3294944
stealththeninja

@stealththeninja: nó không giống nhau. Điều này bỏ thứ hai và múi giờ là tốt.
Dan Dascalescu

-3
var hours = date.getHours();
        var minutes = date.getMinutes();
        var ampm = hours >= 12 ? 'pm' : 'am';
        hours = hours % 12;
        hours = hours ? hours : 12; // the hour '0' should be '12'
        minutes = minutes < 10 ? '0'+minutes : minutes;
        var strTime = hours + ':' + minutes + ' ' + ampm;
        console.log(strTime);
        $scope.time = strTime;

        date.setDate(date.getDate()+1);
        month = '' + (date.getMonth() + 1),
        day = '' + date.getDate(1),
        year = date.getFullYear();
        if (month.length < 2) month = '0' + month;
        if (day.length < 2) day = '0' + day;
        var tomorrow = [year, month, day].join('-');
        $scope.tomorrow = tomorrow;
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.