getMinutes () 0-9 - จะแสดงตัวเลขสองหลักได้อย่างไร?


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

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

สิ่งนี้ส่งกลับ 3

  1. ฉันจะคืนค่า '03' ได้อย่างไร
  2. เหตุใด.lengthผลตอบแทนจึงไม่ระบุ?

ฉันลองแล้ว แต่ไม่ได้ผล:

ถ้าอย่างstrlen == 1นั้นnum = ('0' + num);


เพียงเพื่อบวกผลตอบแทน.getMinutes()เป็นจำนวนเต็มคุณไม่สามารถเข้าถึง.lengthจากจำนวนเต็ม ในการทำให้สำเร็จ (ไม่แนะนำเมื่อจัดการกับวันที่) คือการแยกวิเคราะห์ตัวเลขเป็นสตริงแล้วตรวจสอบความยาว เช่น:date.getMinutes().toString().length
ViniciusPires

คำตอบ:


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

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

2
นี่<10?'0':''หมายความว่าอย่างไร?
user1063287

@ user1063287 เป็นคำสั่ง if else แบบอินไลน์
Aryeh Armon

5
@ user1063287 หมายความว่า: "ถ้า getMinutes () น้อยกว่า 10 ให้ส่งคืน 0 ถ้ามากกว่าให้ส่งคืนสตริงว่าง
Michael Giovanni Pumo


(เงื่อนไข? จริง: เท็จ) ใน PHP คุณสามารถละเว้นคำสั่งจริง (เงื่อนไข?: เท็จ) ใน JS จากนั้นคุณจะใช้ (เงื่อนไข || เท็จ) ตัวดำเนินการ Ternary en.wikipedia.org/wiki/Ternary_operation
llange

208

ใช่คำตอบเหล่านี้ไม่ดีแม้แต่โพสต์ด้านบนก็เลือก นี่คือการข้ามเบราว์เซอร์และการแปลง int / สตริงที่สะอาดกว่า นอกจากนี้คำแนะนำของฉันคืออย่าใช้ชื่อตัวแปร 'วันที่' ด้วยรหัสเช่นdate = Date(...)ที่คุณต้องใช้ความอ่อนไหวของภาษาเป็นอย่างมาก (ใช้งานได้ แต่มีความเสี่ยงเมื่อคุณทำงานกับเซิร์ฟเวอร์ / รหัสเบราว์เซอร์ในภาษาต่างๆโดยใช้กฎที่แตกต่างกัน) . ดังนั้นสมมติว่า javascript Date ในตัวแปรcurrent_date:

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

เทคนิคคือใช้อักขระทางขวาสุด 2 ตัว(slice(-2))ของ "0" ต่อท้ายค่าสตริงของgetMinutes()ใช้ได้บนค่าสตริงของ ดังนั้น:

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

และ

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

7
โซลูชันที่สวยงาม
Oldenborg

1
การใช้ slice (-2) นั้นใช้งานง่าย แต่ฉันชอบมัน
ChrisFox

36

อีกวิธีสั้น ๆ คือเติมนาทีด้วยศูนย์นำโดยใช้:

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

ความหมาย: สร้างสตริงให้ยาวสองอักขระหากไม่มีอักขระให้ตั้งค่า 0ที่ตำแหน่งนี้

ดูเอกสารได้ที่str.padStart (targetLength, padString)


คำตอบที่ดีมาก
Snsxn

20

ฟังก์ชัน ES6 ที่สวยงามเพื่อจัดรูปแบบวันที่เป็นhh:mm:ss:

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

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

12

ฉันต้องการให้วิธีแก้ปัญหาที่เป็นระเบียบมากขึ้นหากทำได้คำตอบที่ได้รับการยอมรับนั้นดีมาก แต่ฉันคงทำแบบนี้

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

ตอนนี้ถ้าคุณต้องการใช้สิ่งนี้

console.log(date.getFullMinutes());

10

ฉันแนะนำ:

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

มันเป็นการเรียกใช้ฟังก์ชันหนึ่งน้อยลง เป็นเรื่องดีเสมอที่จะคิดถึงประสิทธิภาพ มันสั้นเช่นกัน


4

คุณควรตรวจสอบว่ามีค่าน้อยกว่า 10 หรือไม่ ... ไม่ต้องมองหาความยาวเพราะนี่เป็นตัวเลขไม่ใช่สตริง


4

อีกทางเลือกหนึ่ง:

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

ฉันชอบโซลูชันนี้ แต่ดูเหมือนว่า IE8 และเวอร์ชันก่อนหน้าจะไม่รองรับตัวเลขติดลบสำหรับsubstr. w3schools.com/jsref/jsref_substr.asp
GtEx


3

.lengthไม่ได้กำหนดเนื่องจากgetMinutesกำลังส่งคืนตัวเลขไม่ใช่สตริง ตัวเลขไม่มีlengthคุณสมบัติ คุณสามารถทำได้

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

เพื่อทำให้เป็นสตริงจากนั้นตรวจสอบความยาว (คุณต้องการตรวจสอบlength === 1ไม่ใช่ 0)


3

ตัวเลขไม่มีความยาว แต่คุณสามารถแปลงตัวเลขเป็นสตริงได้อย่างง่ายดายตรวจสอบความยาวแล้วนำหน้า 0 หากจำเป็น:

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

3

ฉันไม่เห็นคำตอบ ES6 ใด ๆ ที่นี่ดังนั้นฉันจะเพิ่มคำตอบโดยใช้การจัดรูปแบบ StandardJS

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

3

ฉันคิดว่าคุณต้องการค่าเป็นสตริง คุณสามารถใช้รหัสด้านล่างนี้ มันจะส่งคืนค่านาทีสองหลักให้คุณเป็นสตริงเสมอ

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

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

หวังว่านี่จะช่วยได้


1

ฉันมักจะใช้รหัสนี้:

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

ค่อนข้างคล้ายกับคำตอบที่ยอมรับของ @ogur แต่ไม่เชื่อมสตริงว่างในกรณีที่ไม่ต้องการ 0 ไม่แน่ใจว่าจะดีกว่า เป็นวิธีอื่นที่จะทำได้!


1

แล้วเป็นอย่างไรบ้าง? มันได้ผลสำหรับฉัน! :)

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

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

ใหม่สำหรับ JS ดังนั้นนี่จึงมีประโยชน์มากคนส่วนใหญ่ที่ดูพร็อบนี้ใหม่ด้วยดังนั้นนี่คือวิธีที่ฉันทำให้มันแสดงใน div ที่เรียกว่า "class =" min "

หวังว่ามันจะช่วยใครสักคน



0

คุณสามารถใช้ช่วงเวลา js:

moment(date).format('mm')

ตัวอย่าง: moment('2019-10-29T21:08').format('mm') ==> 08

หวังว่ามันจะช่วยใครสักคน


ดีมากเมื่อมีใครใช้ช่วงเวลาขอบคุณ :-)
Nadine


-4

หากคุณกำลังใช้ AngularJS ในโปรเจ็กต์ของคุณเพียงแค่ฉีด $ filter และใช้มันดังนี้:

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

นอกจากนี้คุณยังสามารถจัดรูปแบบการส่งออกในแม่แบบให้มากขึ้นเกี่ยวกับการกรองที่นี่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.