getMinutes () 0-9 - Làm cách nào để hiển thị hai chữ số?


136
var date = "2012-01-18T16:03";
var date = new Date(date);

console.log(date.getMinutes());
console.log(date.getMinutes().length)

Điều này trả về 3.

  1. Làm cách nào để tôi trả lại '03'?
  2. Tại sao .lengthtrở lại không xác định?

Tôi đã thử điều này, nhưng nó không hoạt động:

Nếu strlen == 1sau đónum = ('0' + num);


Chỉ cần thêm, trả về .getMinutes()là một số nguyên, bạn không thể truy cập .lengthtừ một số nguyên. Để thực hiện điều đó (không được khuyến nghị khi xử lý ngày), hãy phân tích số thành chuỗi và sau đó kiểm tra độ dài. Ví dụ:date.getMinutes().toString().length
ViniciusPires

Câu trả lời:


275
var date = new Date("2012-01-18T16:03");

console.log( (date.getMinutes()<10?'0':'') + date.getMinutes() );

2
Điều này <10?'0':''có nghĩa là gì?
dùng1063287

@ user1063287 đó là một câu lệnh nội tuyến nếu khác
Aryeh Armon

5
@ user1063287 Có nghĩa là: "Nếu getMinutes () nhỏ hơn 10, trả về 0, nếu lớn hơn, hãy trả về một chuỗi trống.
Michael Giovanni Pumo


(điều kiện đúng: sai?) trong PHP bạn có thể bỏ qua báo cáo kết quả đúng: trong JS sau đó bạn sẽ sử dụng (điều kiện || false) điều hành ternary (điều kiện sai?) en.wikipedia.org/wiki/Ternary_operation
llange

203

Rất thích những câu trả lời này không tuyệt vời, ngay cả bài đăng hàng đầu cũng bị thu hút. Ở đây, trình duyệt chéo và chuyển đổi int / chuỗi sạch hơn. Ngoài ra, lời khuyên của tôi là không sử dụng tên biến 'ngày' với mã như date = Date(...)bạn đang phụ thuộc nhiều vào độ nhạy của ngôn ngữ (nó hoạt động, nhưng rủi ro khi bạn làm việc với mã máy chủ / trình duyệt ở các ngôn ngữ khác nhau với các quy tắc khác nhau) . Vì vậy, giả sử ngày javascript trong một var current_date:

mins = ('0'+current_date.getMinutes()).slice(-2);

Kỹ thuật này lấy 2 ký tự ngoài cùng bên phải (slice(-2))là "0" được thêm vào giá trị chuỗi của getMinutes(). Vì thế:

"0"+"12" -> "012".slice(-2) -> "12"

"0"+"1" -> "01".slice(-2) -> "01"

7
Giải pháp tao nhã
Oldenborg

1
Việc sử dụng lát (-2) là phản trực giác, nhưng tôi thích nó.
ChrisFox

33

Một cách ngắn khác là điền vào số phút bằng số 0 bằng cách sử dụng:

String(date.getMinutes()).padStart(2, "0");

Ý nghĩa: Làm cho chuỗi hai ký tự dài, nếu thiếu char thì đặt 0ở vị trí này.

Xem tài liệu tại str.padStart (targetLdrops, padString)


18

Chức năng ES6 thanh lịch để định dạng một ngày thành hh:mm:ss:

const leadingZero = (num) => `0${num}`.slice(-2);

const formatTime = (date) =>
  [date.getHours(), date.getMinutes(), date.getSeconds()]
  .map(leadingZero)
  .join(':');

12

Tôi muốn cung cấp một giải pháp gọn gàng hơn cho vấn đề nếu tôi có thể. Câu trả lời được chấp nhận là rất tốt. Nhưng tôi sẽ làm nó như thế này.

Date.prototype.getFullMinutes = function () {
   if (this.getMinutes() < 10) {
       return '0' + this.getMinutes();
   }
   return this.getMinutes();
};

Bây giờ nếu bạn muốn sử dụng này.

console.log(date.getFullMinutes());

10

Tôi đề nghị:

var minutes = data.getMinutes();
minutes = minutes > 9 ? minutes : '0' + minutes;

đó là một chức năng gọi ít hơn. Nó luôn luôn tốt để nghĩ về hiệu suất. Nó cũng ngắn;


4

bạn nên kiểm tra xem nó có nhỏ hơn 10 không ... không tìm chiều dài của nó, bởi vì đây là một số và không phải là một chuỗi


4

Một lựa chọn khác:

var dateTime = new Date();
var minutesTwoDigitsWithLeadingZero = ("0" + dateTime.getMinutes()).substr(-2);

Tôi thích giải pháp này, nhưng có vẻ như IE8 và các phiên bản trước không hỗ trợ số âm cho substr. w3schools.com/jsref/jsref_substr.asp
GtEx


3

.lengthkhông xác định vì getMinutesđang trả về một số, không phải là một chuỗi. số không có lengthtài sản. Bạn có thể làm

var m = "" + date.getMinutes();

để biến nó thành một chuỗi, sau đó kiểm tra độ dài (bạn muốn kiểm tra length === 1chứ không phải 0).


3

Các số không có độ dài, nhưng bạn có thể dễ dàng chuyển đổi số thành chuỗi, kiểm tra độ dài và sau đó thêm 0 nếu cần thiết:

var strMonth = '' + date.getMinutes ();
if (strMonth.length == 1) {
  strMonth = '0' + strMonth;
}

3

Tôi không thấy bất kỳ câu trả lời ES6 nào ở đây vì vậy tôi sẽ thêm một câu sử dụng định dạng StandardJS

// ES6 String formatting example
const time = new Date()
const tempMinutes = new Date.getMinutes()
const minutes = (tempMinutes < 10) ? `0${tempMinutes}` : tempMinutes

3

Tôi giả sử bạn sẽ cần giá trị dưới dạng chuỗi. Bạn có thể sử dụng mã dưới đây. Nó sẽ luôn trả về cung cấp cho bạn hai phút chữ số dưới dạng chuỗi.

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

if (min < 10) {
min = '0' + min;
} else {
min = min + '';
}
console.log(min);

Hi vọng điêu nay co ich.


1

Tôi thường sử dụng đoạn mã này:

var start = new Date(timestamp),
    startMinutes = start.getMinutes() < 10 ? '0' + start.getMinutes() : start.getMinutes();

Nó khá giống với câu trả lời được chấp nhận @ogur nhưng không nối chuỗi trống trong trường hợp 0 ​​là không cần thiết. Không chắc nó tốt hơn. Chỉ là một cách khác để làm điều đó!


1

bạn có thể sử dụng khoảnh khắc js:

moment(date).format('mm')

thí dụ : moment('2019-10-29T21:08').format('mm') ==> 08

hy vọng nó sẽ giúp được ai đó


rất tuyệt khi mọi người đang sử dụng khoảnh khắc, cảm ơn bạn :-)
Nadine

0
$(".min").append( (date.getMinutes()<10?'0':'') + date.getMinutes() );

mới đối với JS vì vậy điều này rất hữu ích khi hầu hết các ppl nhìn vào thăm dò này cũng mới vì vậy đây là cách tôi đã hiển thị nó trong div có tên là "class =" min "

hy vọng nó sẽ giúp được ai đó


0

Còn cái này thì sao? nó làm việc cho tôi :)

var d = new Date();
var minutes = d.getMinutes().toString().replace(/^(\d)$/, '0$1');

0

Một tùy chọn khác để có được hai chữ số phút hoặc giờ.

var date = new Date("2012-01-18T16:03");

var minutes = date.toTimeString().slice(3, 5); 
var hours   = date.toTimeString().slice(0, 2); 


-2

Nếu bạn đang sử dụng AngularJS trong dự án của mình, chỉ cần thêm bộ lọc $ và sử dụng nó như ở đây:

$filter('date')(value, 'HH:mm')

Bạn cũng có thể định dạng đầu ra trong mẫu, thêm về các bộ lọc ở đây .

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.