Javascript giây đến phút và giây


170

Đây là một vấn đề phổ biến nhưng tôi không biết làm thế nào để giải quyết nó. Mã dưới đây hoạt động tốt.

var mind = time % (60 * 60);
var minutes = Math.floor(mind / 60);

var secd = mind % 60;
var seconds = Math.ceil(secd);

Tuy nhiên, khi tôi nhận được 1 giờ hoặc 3600 giây, nó sẽ trả về 0 phút và 0 giây. Làm thế nào tôi có thể tránh điều này để nó trả lại tất cả các phút?

Cảm ơn


Đó là bởi vì khi thời gian = 3600, 3600% 3600 luôn là 0 ... vì vậy mọi thứ khác sẽ là 0 theo tính toán của bạn.
MSI

Câu trả lời:


338

Để có được số phút đầy đủ, hãy chia tổng số giây cho 60 (60 giây / phút):

var minutes = Math.floor(time / 60);

Và để có được những giây còn lại, hãy nhân số phút đầy đủ với 60 và trừ đi tổng số giây:

var seconds = time - minutes * 60;

Bây giờ nếu bạn cũng muốn nhận được toàn bộ số giờ, hãy chia số giây tổng cộng cho 3600 (60 phút / giờ · 60 giây / phút) trước, sau đó tính các giây còn lại:

var hours = Math.floor(time / 3600);
time = time - hours * 3600;

Sau đó, bạn tính toàn bộ số phút và giây còn lại.

Tặng kem:

Sử dụng mã sau đây để in thời gian đẹp (được đề xuất bởi Dru)

function str_pad_left(string,pad,length) {
    return (new Array(length+1).join(pad)+string).slice(-length);
}

var finalTime = str_pad_left(minutes,'0',2)+':'+str_pad_left(seconds,'0',2);

57
Sẽ sạch hơn một chút để có các giây còn lại bằng cách thực hiện 'var giây = time% 60'.
Edward D'Souza

11
@Radio thêm số không hàng đầu bằng cách sử dụng function str_pad_left(string,pad,length){ return (new Array(length+1).join(pad)+string).slice(-length); } var finalTime = str_pad_left(minutes,'0',2)+':'+str_pad_left(seconds,'0',2);
Dru

1
Giải pháp này sẽ không hoạt động cho các giá trị âm của time. Nếu bạn nhập ví dụ -1 giây, bạn sẽ nhận được -1 phút và quay lại 59 giây ...
Pylinux

5
Ý nghĩa của việc có tiêu cực là timegì? Về mặt logic, sự khác biệt về thời gian luôn luôn tích cực
mcont 29/12/14

4
Bạn có thể sử dụng mô-đun để có được số giây, theo ý kiến ​​của tôi thì dễ đọc hơn. var seconds = time % 60
JCM

106

Một giải pháp ưa thích khác:

function fancyTimeFormat(duration)
{   
    // Hours, minutes and seconds
    var hrs = ~~(duration / 3600);
    var mins = ~~((duration % 3600) / 60);
    var secs = ~~duration % 60;

    // Output like "1:01" or "4:03:59" or "123:03:59"
    var ret = "";

    if (hrs > 0) {
        ret += "" + hrs + ":" + (mins < 10 ? "0" : "");
    }

    ret += "" + mins + ":" + (secs < 10 ? "0" : "");
    ret += "" + secs;
    return ret;
}

~~là một tốc ký cho Math.floor, xem liên kết này để biết thêm

Thử trực tuyến


14
Ý nghĩa của nó là ~~gì?
mcont

9
Đây là một shorhand cơ bản cho Math.floor, xem liên kết này .
lapin

Nó hoạt động tốt ..... :) Bạn có thể làm tròn giá trị như cách này hours = hours.toFixed (0); phút = phút.toFixed (0); secs = secs.toFixed (0);
Abdul Khaliq

1
Cảm ơn giải pháp này! Tôi thêm vào time = math.round(time)dòng đầu tiên để cho tôi làm tròn giây.
fotoflo

Đây là giải pháp chính xác hơn. Như đã nêu ở trên, giải pháp có nhiều phiếu bầu nhất trên trang này hiển thị 180 giây là 2m60 giây.
SongBox

71

Đối với những người đang hy vọng một giải pháp đơn giản và nhanh chóng để định dạng giây thành M:SS:

function fmtMSS(s){return(s-(s%=60))/60+(9<s?':':':0')+s}

thực hiện ..
Chức năng chấp nhận hoặc một Number(ưu tiên) hoặc một String(2 chuyển đổi 'phạt' mà bạn có thể giảm một nửa bởi prepending +trong lập luận cuộc gọi chức năng cho snhư trong: fmtMSS(+strSeconds)), đại diện cho giây nguyên dương snhư là đối số.

Ví dụ:

fmtMSS(    0 );  //   0:00
fmtMSS(   '8');  //   0:08
fmtMSS(    9 );  //   0:09
fmtMSS(  '10');  //   0:10
fmtMSS(   59 );  //   0:59
fmtMSS( +'60');  //   1:00
fmtMSS(   69 );  //   1:09
fmtMSS( 3599 );  //  59:59
fmtMSS('3600');  //  60:00
fmtMSS('3661');  //  61:01
fmtMSS( 7425 );  // 123:45

Phá vỡ:

function fmtMSS(s){   // accepts seconds as Number or String. Returns m:ss
  return( s -         // take value s and subtract (will try to convert String to Number)
          ( s %= 60 ) // the new value of s, now holding the remainder of s divided by 60 
                      // (will also try to convert String to Number)
        ) / 60 + (    // and divide the resulting Number by 60 
                      // (can never result in a fractional value = no need for rounding)
                      // to which we concatenate a String (converts the Number to String)
                      // who's reference is chosen by the conditional operator:
          9 < s       // if    seconds is larger than 9
          ? ':'       // then  we don't need to prepend a zero
          : ':0'      // else  we do need to prepend a zero
        ) + s ;       // and we add Number s to the string (converting it to String as well)
}

Lưu ý: Phạm vi phủ định có thể được thêm bằng cách thêm vào (0>s?(s=-s,'-'):'')+biểu thức trả về (thực tế, (0>s?(s=-s,'-'):0)+cũng sẽ hoạt động tốt).


Tôi khuyên bạn nên thêm Math.floor(s)vào dòng cuối cùng để có kết quả sạch hơn. Làm việc tuyệt vời nào, cảm ơn!
Pháo đài Diego

@PossessWithin: Không, bạn KHÔNG nên "thêm Math.floor (s) vào dòng cuối cùng" (của đoạn mã phân tích) vì nhiều lý do, vì điều đó sẽ gây ra lỗi cho các giá trị giữa 910không cần sửa đổi thêm; nếu bạn nhập chẳng hạn 69.25thì đầu ra sẽ 1:9thay vì 1:09! Hàm này (mà tôi đã chỉ định rõ ràng số nguyên giây) được dự định và chế tạo một cách đáng yêu là công cụ crunching hoàn hảo cao / 'động cơ' (không phải ninja đánh golf cho kích thước) và vì vậy tôi coi nó là phù hợp để gánh nặng cho động cơ đó với xác minh không cần thiết / dọn dẹp / lọc ...
GitaarLAB

... làm việc (như NaN, +/-Infinityv.v.) và làm tròn các tùy chọn cần được lập trình viên thực hiện, trước khi gọi hàm, dựa trên nhu cầu cụ thể và các giá trị đầu vào có thể có mà ứng dụng có thể gặp phải! Đương nhiên, bạn có thể tự do vá nó nếu kiến thức tên miền của bạn về các giá trị đầu vào dự kiến cho rằng trường hợp sử dụng cụ thể của bạn hầu như luôn nhận được các giá trị dấu phẩy động kiểm tra hoàn hảo cho thấy ứng dụng của bạn. Trong trường hợp bạn muốn vá chỉ các giá trị dương bạn PHẢI ....
GitaarLAB

... sửa đổi (9<s?':':':0')thành (10>s?':0':':')(thêm 1 char nhưng 'hy sinh' 5 trên 6 đường dẫn đúng thành đường dẫn sai) HOẶC (10<=s?':':':0')(thêm 2 ký tự nhưng duy trì 5 trên 6 đường dẫn đúng). Sau đó, tôi khuyên bạn nên thay đổi dấu vết cuối cùng +sthành +(s|0) thay vì Math.floor(s) , để không phá hủy vẻ đẹp của việc không cần giải quyết và gọi Math.floor trong khi vẫn hoạt động chính xác trên toàn bộ+/-MAX_SAFE_INTEGER phạm vi 53 bit thay vì phạm vi 'chỉ 32 bit (không dấu) hoặc 31 bit (đã ký)! Lưu ý rằng từ tính ABS(s)được đảm bảo nhỏ hơn 60, vì vậy chữ ký ...
GitaarLAB

... được ký bitwise HOẶC an toàn. Cũng lưu ý rằng việc sửa đổi cụ thể này mà không bỏ qua các giây còn lại sẽ làm cho hàm đầu ra phân số giây mà không theo dõi các số 0 phân số, nhưng thường sẽ có nhiều hơn 3 chữ số có giá trị khác không đáng kể mà bạn có thể cần phải xử lý. Cuối cùng, khi được kết hợp với mã sửa lỗi trước tùy chọn cho phạm vi âm, sửa đổi cụ thể này sẽ TRUNCate giây một cách hiệu quả (không phải FLOORing chúng). PS: PFFT, whoever came up with just 512 char limit for any meaningful comment should be...
GitaarLAB

21

Bạn cũng có thể sử dụng đối tượng Ngày gốc:

var date = new Date(null);
date.setSeconds(timeInSeconds);

// retrieve time ignoring the browser timezone - returns hh:mm:ss
var utc = date.toUTCString();
// negative start index in substr does not work in IE 8 and earlier
var time = utc.substr(utc.indexOf(':') - 2, 8)

// retrieve each value individually - returns h:m:s
var time = date.getUTCHours() + ':' + date.getUTCMinutes() + ':' +  date.getUTCSeconds();

// does not work in IE8 and below - returns hh:mm:ss
var time = date.toISOString().substr(11, 8);

// not recommended - only if seconds number includes timezone difference
var time = date.toTimeString().substr(0, 8);

Tất nhiên giải pháp này chỉ hoạt động trong thời gian Thời gian ngắn hơn 24 giờ;)


1
Không nghĩ đến việc để đối tượng Date xử lý định dạng. Ít linh hoạt hơn, nhưng nếu bạn muốn hh: mm: ss (hoặc phần phụ của điều đó) thì thật tuyệt
MartinAnsty

Tôi đã thử điều này với 25 giây và nó trả về 01:00:25 tương đương với 1 giờ 25 giây.
gian

Vâng, có lẽ là do múi giờ của bạn. Tôi đã cập nhật các giải pháp để xử lý trường hợp này.
hamczu

datecũng có thể được xây dựng nhưvar date = new Date(timeInSeconds * 1000)
Nuno André

20

Biến thể tốt nhất 2019

định dạng hh:mm:ss

console.log(display(60 * 60 * 2.5 + 25)) // 2.5 hours + 25 seconds

function display (seconds) {
  const format = val => `0${Math.floor(val)}`.slice(-2)
  const hours = seconds / 3600
  const minutes = (seconds % 3600) / 60

  return [hours, minutes, seconds % 60].map(format).join(':')
}


hmmm, secondslà const. bạn không thể gán lại nó.
ronapelbaum

@ronapelbaum lập luận này, không liên tục, tôi không hiểu những gì bạn có nghĩa là
Илья Зеленько

@ronapelbaum nếu bạn chỉ định giây thay vì lấy chúng làm tham số bạn phải sử dụng let, ví dụ như function display (state) { let seconds = state.seconds; ... }đó có thể là lỗi của bạn đến từ đâu?
retrovertigo

Một param param nên được coi là const. Khi bạn sử dụng, %=bạn đang gán lại thông số này. Chỉ cần sử dụngseconds%60
ronapelbaum

16
function secondsToMinutes(time){
    return Math.floor(time / 60)+':'+Math.floor(time % 60);
}

3
Điều này có thể được cải thiện với số không đệm trong vài giây: function secondsToMinutes(time){ return Math.floor(0 / 60)+':'+('0'+Math.floor(0 % 60)).slice(-2); }
Kus

đẹp! cảm ơn bạn @Kus. Chỉ là bạn có thể muốn thay thế hai cái 0đó bằng time, tôi có đúng không?
mikey

2
@mikey ôi! Có,function secondsToMinutes(time){ return Math.floor(time / 60) + ':' + ('0' + Math.floor(time % 60)).slice(-2) }
Kus

12

Để thêm số không hàng đầu, tôi chỉ cần làm:

var minutes = "0" + Math.floor(time / 60);
var seconds = "0" + (time - minutes * 60);
return minutes.substr(-2) + ":" + seconds.substr(-2);

Đẹp và ngắn


9

Làm sạch một lớp lót bằng ES6


const secondsToMinutes = seconds => Math.floor(seconds / 60) + ':' + ('0' + Math.floor(seconds % 60)).slice(-2);

6

Một lớp lót (không hoạt động với giờ):

 function sectostr(time) {
    return ~~(time / 60) + ":" + (time % 60 < 10 ? "0" : "") + time % 60;
 }

4

Giây đến h: mm: ss

var hours = Math.floor(time / 3600);
time -= hours * 3600;

var minutes = Math.floor(time / 60);
time -= minutes * 60;

var seconds = parseInt(time % 60, 10);

console.log(hours + ':' + (minutes < 10 ? '0' + minutes : minutes) + ':' + (seconds < 10 ? '0' + seconds : seconds));

Ai đó có thể giải thích minutes < 10 ? '0' + minutes : minutescho tôi, giả sử chỉ có kiến ​​thức js cơ bản?
Zediiiii

Nếu phút là một chữ số (<10), hãy trả trước số 0 khác.
kayz1

Những sự giúp đỡ đó! Tôi đã không nhận ra rằng "?" là toán tử ternary trong js.
Zediiiii

4

Chức năng sau sẽ giúp bạn có được Ngày, Giờ, Phút, giây

toDDHHMMSS(inputSeconds){
        const Days = Math.floor( inputSeconds / (60 * 60 * 24) );
        const Hour = Math.floor((inputSeconds % (60 * 60 * 24)) / (60 * 60));
        const Minutes = Math.floor(((inputSeconds % (60 * 60 * 24)) % (60 * 60)) / 60 );
        const Seconds = Math.floor(((inputSeconds % (60 * 60 * 24)) % (60 * 60)) % 60 );
        let ddhhmmss  = '';
        if (Days > 0){
            ddhhmmss += Days + ' Day ';
        }
        if (Hour > 0){
            ddhhmmss += Hour + ' Hour ';
        }

        if (Minutes > 0){
            ddhhmmss += Minutes + ' Minutes ';
        }

        if (Seconds > 0){
            ddhhmmss += Seconds + ' Seconds ';
        }
        return ddhhmmss;
    }
alert( toDDHHMMSS(2000));

Tôi thích cái này. Tôi đã thay đổi if (Days > 0){ ddhhmmss += Days + ' Day '; }để if (Days > 0) {ddhhmmss += Days === 1 ? Days + ' Day ' : Days + ' Days '};nói 1 Day, 2 Days, 3 Days, vv tương tự có thể được thực hiện cho những người khác.
Ste

4

Sau tất cả, đây là một giải pháp đơn giản khác:

const time = new Date(null);
time.setSeconds(7530);
console.log(time.getHours(), time.getMinutes(), time.getSeconds());

1
Sử dụng time.setSeconds(1);trả lại 1 0 1khi cần 0 0 1.
Ste

3

Một giải pháp khác nhưng thanh lịch hơn nhiều cho việc này là như sau:

/**
 * Convert number secs to display time
 *
 * 65 input becomes 01:05.
 *
 * @param Number inputSeconds Seconds input.
 */
export const toMMSS = inputSeconds => {
    const secs = parseInt( inputSeconds, 10 );
    let minutes = Math.floor( secs / 60 );
    let seconds = secs - minutes * 60;

    if ( 10 > minutes ) {
        minutes = '0' + minutes;
    }
    if ( 10 > seconds ) {
        seconds = '0' + seconds;
    }

    // Return display.
    return minutes + ':' + seconds;
};

2

Để thêm số không tôi thực sự không thấy cần phải có một chức năng khác đầy đủ, nơi bạn có thể chỉ cần sử dụng ví dụ

var mins=Math.floor(StrTime/60);
var secs=StrTime-mins * 60;
var hrs=Math.floor(StrTime / 3600);
RoundTime.innerHTML=(hrs>9?hrs:"0"+hrs) + ":" + (mins>9?mins:"0"+mins) + ":" + (secs>9?secs:"0"+secs);

Đó là lý do tại sao chúng tôi có tuyên bố có điều kiện ở nơi đầu tiên.

(điều kiện? if true: if false) vì vậy nếu ví dụ giây lớn hơn 9 so với chỉ hiển thị giây khác thì thêm chuỗi 0 trước nó.


2

hãy thử điều này: Chuyển đổi thứ hai sang GIỜ, GIỜ và GIÂY.

function convertTime(sec) {
    var hours = Math.floor(sec/3600);
    (hours >= 1) ? sec = sec - (hours*3600) : hours = '00';
    var min = Math.floor(sec/60);
    (min >= 1) ? sec = sec - (min*60) : min = '00';
    (sec < 1) ? sec='00' : void 0;

    (min.toString().length == 1) ? min = '0'+min : void 0;    
    (sec.toString().length == 1) ? sec = '0'+sec : void 0;    

    return hours+':'+min+':'+sec;
}

2

var seconds = 60;
var measuredTime = new Date(null);
measuredTime.setSeconds(seconds); // specify value of SECONDS
var Time = measuredTime.toISOString().substr(11, 8);
document.getElementById("id1").value = Time;
<div class="form-group">
  <label for="course" class="col-md-4">Time</label>
  <div class="col-md-8">
    <input type="text" class="form-control" id="id1" name="field">Min
  </div>
</div>


2

Nếu bạn đang sử dụng Moment.js thì bạn có thể sử dụng có Durationđối tượng tích hợp sẵn

const duration = moment.duration(4825, 'seconds');

const h = duration.hours(); // 1
const m = duration.minutes(); // 20
const s = duration.seconds(); // 25

2

CẬP NHẬT 2020

Sử dụng toán học cơ bản và javascript đơn giản, điều này có thể được thực hiện chỉ trong một vài dòng mã.

VÍ DỤ - Chuyển đổi 7735 secondssang HH:MM:SS.


MÔN TOÁN:

Tính toán sử dụng:

  1. Math.floor()- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/floor

Các Math.floor()chức năng trả về số nguyên lớn nhất nhỏ hơn hoặc bằng một số nhất định.

  1. %Toán tử số học (Phần còn lại) - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Arithatures_Operators#Remainder

Toán tử còn lại trả về phần còn lại còn lại khi một toán hạng được chia cho toán hạng thứ hai. Nó luôn luôn có dấu hiệu của cổ tức.

Kiểm tra mã dưới đây. Giây được chia 3600cho số giờ và phần còn lại, được sử dụng để tính số phút và giây.

HOURS => 7735 / 3600 = 2 remainder 535

MINUTES => 535 / 60 = 8 remainder 55

SECONDS => 55


SỐ KHÔNG HÀNG ĐẦU:

Nhiều câu trả lời ở đây sử dụng phương pháp phức tạp để cho thấy số giờ, phút và giây trong một cách thích hợp với lãnh đạo zero - 45, 04vv Điều này có thể được thực hiện bằng padStart(). Điều này hoạt động cho các chuỗi vì vậy số phải được chuyển đổi thành chuỗi bằng cách sử dụng toString().

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/padStart

Các padStart()phương pháp miếng chuỗi hiện bằng một chuỗi khác (nhiều lần, nếu cần thiết) cho đến chuỗi kết quả đạt độ dài nhất định. Phần đệm được áp dụng từ đầu chuỗi hiện tại.


MÃ:

function secondsToTime(e){
    var h = Math.floor(e / 3600).toString().padStart(2,'0'),
        m = Math.floor(e % 3600 / 60).toString().padStart(2,'0'),
        s = Math.floor(e % 60).toString().padStart(2,'0');
    
    return h + ':' + m + ':' + s;
}

console.log(secondsToTime(7735));  //02:08:55

/*
secondsToTime(SECONDS) => HH:MM:SS 

secondsToTime(8)       => 00:00:08 
secondsToTime(68)      => 00:01:08
secondsToTime(1768)    => 00:29:28
secondsToTime(3600)    => 01:00:00
secondsToTime(5296)    => 01:28:16
secondsToTime(7735)    => 02:08:55
secondsToTime(45296)   => 12:34:56
secondsToTime(145296)  => 40:21:36
secondsToTime(1145296) => 318:08:16
*/


1

Bạn đã thực hiện đủ mã để theo dõi các phần thời gian và giây.

Những gì bạn có thể làm là thêm yếu tố giờ trong:

var hrd = time % (60 * 60 * 60);
var hours = Math.floor(hrd / 60);

var mind = hrd % 60;
var minutes = Math.floor(mind / 60);

var secd = mind % 60;
var seconds = Math.ceil(secd);

var moreminutes = minutes + hours * 60

Điều này sẽ cung cấp cho bạn những gì bạn cũng cần.


Tôi đã thử cách này bằng "thời gian" là giây và nó không hoạt động. Ví dụ: 975 giây có nghĩa là hrd = 975, có nghĩa là giờ là 16.
Spedge

1

Tôi đã nghĩ đến một cách nhanh hơn để thực hiện điều này và đây là những gì tôi nghĩ ra

var sec = parseInt(time);
var min=0;
while(sec>59){ sec-=60; min++;}

Nếu chúng ta muốn chuyển đổi "thời gian" thành phút và giây, ví dụ:

// time = 75,3 sec
var sec = parseInt(time); //sec = 75
var min=0;
while(sec>59){ sec-=60; min++;} //sec = 15; min = 1

1

Đặt hai xu của tôi vào:

function convertSecondsToMinutesAndSeconds(seconds){
            var minutes;
            var seconds;
            minutes = Math.floor(seconds/60);
            seconds = seconds%60;

            return [minutes, seconds];
        }

Vậy đây:

var minutesAndSeconds = convertSecondsToMinutesAndSeconds(101);

Sẽ có đầu ra sau:

[1,41];

Sau đó, bạn có thể in nó như vậy:

console.log('TIME : ' +  minutesSeconds[0] + ' minutes, ' + minutesSeconds[1] + ' seconds');

//TIME : 1 minutes, 41 seconds

1

strftime.js ( strftime github ) là một trong những thư viện định dạng thời gian tốt nhất. Nó cực kỳ nhẹ - 30KB - và hiệu quả. Sử dụng nó, bạn có thể chuyển đổi giây thành thời gian dễ dàng trong một dòng mã, chủ yếu dựa vào lớp Ngày gốc.

Khi tạo Ngày mới, mỗi đối số tùy chọn có vị trí như sau:

new Date(year, month, day, hours, minutes, seconds, milliseconds);

Vì vậy, nếu bạn khởi tạo một Ngày mới với tất cả các đối số là 0 cho đến giây, bạn sẽ nhận được:

var seconds = 150;
var date = new Date(0,0,0,0,0,seconds);
=> Sun Dec 31 1899 00:02:30 GMT-0500 (EST)

Bạn có thể thấy 150 giây là 2 phút và 30 giây, như đã thấy trong ngày tạo. Sau đó, sử dụng định dạng strftime ("% M:% S" cho "MM: SS"), nó sẽ xuất ra chuỗi phút của bạn.

var mm_ss_str = strftime("%M:%S", date);
=> "02:30"

Trong một dòng, nó sẽ trông như:

var mm_ss_str = strftime('%M:%S', new Date(0,0,0,0,0,seconds));
=> "02:30"

Thêm vào đó, điều này sẽ cho phép bạn hỗ trợ hoán đổi cho nhau HH: MM: SS và MM: SS dựa trên số giây. Ví dụ:

# Less than an Hour (seconds < 3600)
var seconds = 2435;
strftime((seconds >= 3600 ? '%H:%M:%S' : '%M:%S'), new Date(0,0,0,0,0,seconds));
=> "40:35"

# More than an Hour (seconds >= 3600)
var seconds = 10050;
strftime((seconds >= 3600 ? '%H:%M:%S' : '%M:%S'), new Date(0,0,0,0,0,seconds));
=> "02:47:30"

Và tất nhiên, bạn có thể chỉ cần vượt qua bất kỳ định dạng nào bạn muốn thoát ra nếu bạn muốn chuỗi thời gian ít nhiều có ngữ nghĩa.

var format = 'Honey, you said you\'d be read in %S seconds %M minutes ago!';
strftime(format, new Date(0,0,0,0,0,1210));
=> "Honey, you said you'd be read in 10 seconds 20 minutes ago!"

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


1
export function TrainingTime(props) {
    const {train_time } = props;
    const hours = Math.floor(train_time/3600);
    const minutes = Math.floor((train_time-hours * 3600) / 60);
    const seconds = Math.floor((train_time%60));

    return `${hours} hrs  ${minutes} min  ${seconds} sec`;
}

2
Chào mừng bạn đến với Stack Overflow. Theo đề xuất của @PhilRoggenbuck, một lời giải thích sẽ có ích. Để biết thêm thông tin, hãy đọc stackoverflow.com/help/how-to-answer
Mikkel

0

Tôi đề nghị một giải pháp khác:

function formatTime(nbSeconds, hasHours) {
    var time = [],
        s = 1;
    var calc = nbSeconds;

    if (hasHours) {
        s = 3600;
        calc = calc / s;
        time.push(format(Math.floor(calc)));//hour
    }

    calc = ((calc - (time[time.length-1] || 0)) * s) / 60;
    time.push(format(Math.floor(calc)));//minute

    calc = (calc - (time[time.length-1])) * 60;
    time.push(format(Math.round(calc)));//second


    function format(n) {//it makes "0X"/"00"/"XX"
        return (("" + n) / 10).toFixed(1).replace(".", "");
    }

    //if (!hasHours) time.shift();//you can set only "min: sec"

    return time.join(":");
};
console.log(formatTime(3500));//58:20
console.log(formatTime(305));//05:05
console.log(formatTime(75609, true));//21:00:09
console.log(formatTime(0, true));//00:00:00


0

Tôi biết nó đã được giải quyết bằng nhiều cách. Tôi cần chức năng này cho tập lệnh After Effects, trong đó ô nhiễm tốc độ hoặc không gian tên không phải là vấn đề. Tôi thả nó ở đây cho một người cần một cái gì đó tương tự. Tôi cũng đã viết một số bài kiểm tra và làm việc tốt. Vì vậy, đây là mã:

Number.prototype.asTime = function () {
    var hour = Math.floor(this / 3600),
        min = Math.floor((this - hour * 3600) / 60),
        sec = this - hour * 3600 - min * 60,
        hourStr, minStr, secStr;
    if(hour){
        hourStr = hour.toString(),
        minStr = min < 9 ? "0" + min.toString() : min.toString();
        secStr = sec < 9 ? "0" + sec.toString() : sec.toString();
        return hourStr + ":" + minStr + ":" + secStr + "hrs";
    }
    if(min){
        minStr = min.toString();
        secStr = sec < 9 ? "0" + sec.toString() : sec.toString();
        return  minStr + ":" + secStr + "min";
    }
    return sec.toString() + "sec";
}
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.