332

HH-MM-SSJavaScript を使用して秒を文字列に変換するにはどうすればよいですか?

4

32 に答える 32

494

次のような JavaScript の Date メソッドを使用して、外部の JavaScript ライブラリを使用せずにこれを行うことができます。

var date = new Date(null);
date.setSeconds(SECONDS); // specify value for SECONDS here
var result = date.toISOString().substr(11, 8);

または、@Frankのコメントに従って; ワンライナー:

new Date(SECONDS * 1000).toISOString().substr(11, 8);
于 2014-08-13T06:22:57.107 に答える
318

更新(2020):

@Frankの1行ソリューションを使用してください。

new Date(SECONDS * 1000).toISOString().substr(11, 8)

SECONDS <3600で、 MM:SSのみを表示する場合は、以下のコードを使用します。

new Date(SECONDS * 1000).toISOString().substr(14, 5)

それは断然最良の解決策です。


古い答え:

ライブラリを使用しMoment.jsます。

于 2009-08-24T14:33:46.190 に答える
190

標準の Date オブジェクトの組み込み機能が、自分で計算するよりも便利な方法でこれを行うとは思いません。

hours = Math.floor(totalSeconds / 3600);
totalSeconds %= 3600;
minutes = Math.floor(totalSeconds / 60);
seconds = totalSeconds % 60;

例:

let totalSeconds = 28565;
let hours = Math.floor(totalSeconds / 3600);
totalSeconds %= 3600;
let minutes = Math.floor(totalSeconds / 60);
let seconds = totalSeconds % 60;

console.log("hours: " + hours);
console.log("minutes: " + minutes);
console.log("seconds: " + seconds);

// If you want strings with leading zeroes:
minutes = String(minutes).padStart(2, "0");
hours = String(hours).padStart(2, "0");
seconds = String(seconds).padStart(2, "0");
console.log(hours + ":" + minutes + ":" + seconds);

于 2009-08-24T14:39:37.223 に答える
102

私はこれがちょっと古いことを知っていますが...

ES2015:

var toHHMMSS = (secs) => {
    var sec_num = parseInt(secs, 10)
    var hours   = Math.floor(sec_num / 3600)
    var minutes = Math.floor(sec_num / 60) % 60
    var seconds = sec_num % 60

    return [hours,minutes,seconds]
        .map(v => v < 10 ? "0" + v : v)
        .filter((v,i) => v !== "00" || i > 0)
        .join(":")
}

次のように出力されます。

toHHMMSS(129600) // 36:00:00
toHHMMSS(13545) // 03:45:45
toHHMMSS(180) // 03:00
toHHMMSS(18) // 00:18
于 2016-01-17T17:04:28.077 に答える
44

Cleiton がanswerで指摘したように、moment.jsを使用できます。

moment().startOf('day')
        .seconds(15457)
        .format('H:mm:ss');
于 2013-10-18T19:30:50.317 に答える
23

時間を変換するための簡単な関数を次に示します。

function formatSeconds(seconds) {
    var date = new Date(1970,0,1);
    date.setSeconds(seconds);
    return date.toTimeString().replace(/.*(\d{2}:\d{2}:\d{2}).*/, "$1");
}
于 2013-07-22T06:14:55.543 に答える
19

これはトリックを行います:

function secondstotime(secs)
{
    var t = new Date(1970,0,1);
    t.setSeconds(secs);
    var s = t.toTimeString().substr(0,8);
    if(secs > 86399)
        s = Math.floor((t - Date.parse("1/1/70")) / 3600000) + s.substr(2);
    return s;
}

ここからソース)

于 2009-08-24T14:42:17.843 に答える
9

これは Number クラスの拡張です。toHHMMSS() は、秒を hh:mm:ss 文字列に変換します。

Number.prototype.toHHMMSS = function() {
  var hours = Math.floor(this / 3600) < 10 ? ("00" + Math.floor(this / 3600)).slice(-2) : Math.floor(this / 3600);
  var minutes = ("00" + Math.floor((this % 3600) / 60)).slice(-2);
  var seconds = ("00" + (this % 3600) % 60).slice(-2);
  return hours + ":" + minutes + ":" + seconds;
}

// Usage: [number variable].toHHMMSS();

// Here is a simple test
var totalseconds = 1234;
document.getElementById("timespan").innerHTML = totalseconds.toHHMMSS();
// HTML of the test
<div id="timespan"></div>

于 2015-06-29T09:51:50.093 に答える
5

この関数はそれを行う必要があります:

var convertTime = function (input, separator) {
    var pad = function(input) {return input < 10 ? "0" + input : input;};
    return [
        pad(Math.floor(input / 3600)),
        pad(Math.floor(input % 3600 / 60)),
        pad(Math.floor(input % 60)),
    ].join(typeof separator !== 'undefined' ?  separator : ':' );
}

セパレーターを渡さない:場合、(デフォルトの) セパレーターとして使用します:

time = convertTime(13551.9941351); // --> OUTPUT = 03:45:51

-セパレーターとして使用する場合は、2 番目のパラメーターとして渡すだけです。

time = convertTime(1126.5135155, '-'); // --> OUTPUT = 00-18-46

この Fiddleも参照してください。

于 2017-02-07T14:01:56.343 に答える
5

この古いスレッドに耳を傾けてください-OPはHH:MM:SSと述べており、24時間以上のリストが必要であることに気付くまで、多くのソリューションが機能します. また、1 行以上のコードは必要ないかもしれません。どうぞ:

d=(s)=>{f=Math.floor;g=(n)=>('00'+n).slice(-2);return f(s/3600)+':'+g(f(s/60)%60)+':'+g(s%60)}

H+:MM:SS を返します。それを使用するには、単に次を使用します。

d(91260);     // returns "25:21:00"
d(960);       // returns "0:16:00"

...ワンライナーのアプローチを実現するために、可能な限り最小限のコードを使用するようにしました。

于 2017-06-30T01:58:23.653 に答える
4

すべての回答を見て、それらのほとんどに満足できなかった後、これが私が思いついたものです. 私は会話に非常に遅れていることを知っていますが、とにかくここにあります.

function secsToTime(secs){
  var time = new Date(); 
  // create Date object and set to today's date and time
  time.setHours(parseInt(secs/3600) % 24);
  time.setMinutes(parseInt(secs/60) % 60);
  time.setSeconds(parseInt(secs%60));
  time = time.toTimeString().split(" ")[0];
  // time.toString() = "HH:mm:ss GMT-0800 (PST)"
  // time.toString().split(" ") = ["HH:mm:ss", "GMT-0800", "(PST)"]
  // time.toTimeString().split(" ")[0]; = "HH:mm:ss"
  return time;
}

新しい Date オブジェクトを作成し、時刻をパラメーターに変更し、Date オブジェクトを時刻文字列に変換し、文字列を分割して必要な部分のみを返すことで追加のものを削除しました。

「HH:mm:ss」形式で結果を取得するための正規表現、論理、および数学のアクロバットが不要になり、代わりに組み込みメソッドに依存するため、このアプローチを共有すると思いました。

こちらのドキュメントを参照してください: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date

于 2016-01-15T20:29:53.473 に答える
3
var time1 = date1.getTime();
var time2 = date2.getTime();
var totalMilisec = time2 - time1;

alert(DateFormat('hh:mm:ss',new Date(totalMilisec)))

 /* ----------------------------------------------------------
 *  Field        | Full Form          | Short Form
 *  -------------|--------------------|-----------------------
 *  Year         | yyyy (4 digits)    | yy (2 digits)
 *  Month        | MMM (abbr.)        | MM (2 digits)
                 | NNN (name)         |
 *  Day of Month | dd (2 digits)      | 
 *  Day of Week  | EE (name)          | E (abbr)
 *  Hour (1-12)  | hh (2 digits)      | 
 *  Minute       | mm (2 digits)      | 
 *  Second       | ss (2 digits)      | 
 *  ----------------------------------------------------------
 */
function DateFormat(formatString,date){
    if (typeof date=='undefined'){
    var DateToFormat=new Date();
    }
    else{
        var DateToFormat=date;
    }
    var DAY         = DateToFormat.getDate();
    var DAYidx      = DateToFormat.getDay();
    var MONTH       = DateToFormat.getMonth()+1;
    var MONTHidx    = DateToFormat.getMonth();
    var YEAR        = DateToFormat.getYear();
    var FULL_YEAR   = DateToFormat.getFullYear();
    var HOUR        = DateToFormat.getHours();
    var MINUTES     = DateToFormat.getMinutes();
    var SECONDS     = DateToFormat.getSeconds();

    var arrMonths = new Array("January","February","March","April","May","June","July","August","September","October","November","December");
    var arrDay=new Array('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday');
    var strMONTH;
    var strDAY;
    var strHOUR;
    var strMINUTES;
    var strSECONDS;
    var Separator;

    if(parseInt(MONTH)< 10 && MONTH.toString().length < 2)
        strMONTH = "0" + MONTH;
    else
        strMONTH=MONTH;
    if(parseInt(DAY)< 10 && DAY.toString().length < 2)
        strDAY = "0" + DAY;
    else
        strDAY=DAY;
    if(parseInt(HOUR)< 10 && HOUR.toString().length < 2)
        strHOUR = "0" + HOUR;
    else
        strHOUR=HOUR;
    if(parseInt(MINUTES)< 10 && MINUTES.toString().length < 2)
        strMINUTES = "0" + MINUTES;
    else
        strMINUTES=MINUTES;
    if(parseInt(SECONDS)< 10 && SECONDS.toString().length < 2)
        strSECONDS = "0" + SECONDS;
    else
        strSECONDS=SECONDS;

    switch (formatString){
        case "hh:mm:ss":
            return strHOUR + ':' + strMINUTES + ':' + strSECONDS;
        break;
        //More cases to meet your requirements.
    }
}
于 2011-05-24T13:21:01.417 に答える
2

これは、powtac の回答に基づいて秒を hh-mm-ss 形式に変換する関数です。

jsfiddle

/** 
 * Convert seconds to hh-mm-ss format.
 * @param {number} totalSeconds - the total seconds to convert to hh- mm-ss
**/
var SecondsTohhmmss = function(totalSeconds) {
  var hours   = Math.floor(totalSeconds / 3600);
  var minutes = Math.floor((totalSeconds - (hours * 3600)) / 60);
  var seconds = totalSeconds - (hours * 3600) - (minutes * 60);

  // round seconds
  seconds = Math.round(seconds * 100) / 100

  var result = (hours < 10 ? "0" + hours : hours);
      result += "-" + (minutes < 10 ? "0" + minutes : minutes);
      result += "-" + (seconds  < 10 ? "0" + seconds : seconds);
  return result;
}

使用例

var seconds = SecondsTohhmmss(70);
console.log(seconds);
// logs 00-01-10
于 2015-01-27T23:25:43.007 に答える
2

秒を hh:mm:ss 形式に変換する単純な関数:

function getHHMMSSFromSeconds(totalSeconds) {
    if (!totalSeconds) {
      return '00:00:00';
    }
    const hours = Math.floor(totalSeconds / 3600);
    const minutes = Math.floor(totalSeconds % 3600 / 60);
    const seconds = totalSeconds % 60;
    const hhmmss = padTo2(hours) + ':' + padTo2(minutes) + ':' + padTo2(seconds);
    return hhmmss;
}

// function to convert single digit to double digit
function padTo2(value) {
    if (!value) {
      return '00';
    }
    return value < 10 ? String(value).padStart(2, '0') : value;
}
于 2021-06-03T20:14:51.717 に答える
2

私が処理できるようにしたいので、ここでの答えはどれも私の要件を満たしていません

  1. 多数の秒数 (日)、および
  2. 負の数

これらは OP では必須ではありませんが、特に手間がかからない場合は、エッジ ケースをカバーすることをお勧めします。

OP がsecondsと言うとき、OP が秒数を意味することは明らかです。なぜあなたの機能をペグするのStringですか?

function secondsToTimeSpan(seconds) {
    const value = Math.abs(seconds);
    const days = Math.floor(value / 1440);
    const hours = Math.floor((value - (days * 1440)) / 3600);
    const min = Math.floor((value - (days * 1440) - (hours * 3600)) / 60);
    const sec = value - (days * 1440) - (hours * 3600) - (min * 60);
    return `${seconds < 0 ? '-':''}${days > 0 ? days + '.':''}${hours < 10 ? '0' + hours:hours}:${min < 10 ? '0' + min:min}:${sec < 10 ? '0' + sec:sec}`
}
secondsToTimeSpan(0);       // => 00:00:00
secondsToTimeSpan(1);       // => 00:00:01
secondsToTimeSpan(1440);    // => 1.00:00:00
secondsToTimeSpan(-1440);   // => -1.00:00:00
secondsToTimeSpan(-1);      // => -00:00:01
于 2019-04-29T03:46:46.890 に答える
1

以下のコードを使用することもできます。

int ss = nDur%60;
nDur   = nDur/60;
int mm = nDur%60;
int hh = nDur/60;
于 2012-11-13T15:11:31.257 に答える
1

AngularJS を使用している場合、単純な解決策はdate APIで値をフィルター処理することです。これにより、ミリ秒が要求された形式に基づいて文字列に変換されます。例:

<div>Offer ends in {{ timeRemaining | date: 'HH:mm:ss' }}</div>

これにはミリ秒が必要であることに注意してください。したがって、秒から変換する場合は、timeRemaining に 1000 を掛けることができます (元の質問が定式化されているため)。

于 2014-12-15T10:28:00.213 に答える
1
String.prototype.toHHMMSS = function () {
    var sec_num = parseInt(this, 10); // don't forget the second param
    var hours   = Math.floor(sec_num / 3600);
    var minutes = Math.floor((sec_num - (hours * 3600)) / 60);
    var seconds = sec_num - (hours * 3600) - (minutes * 60);

    if (hours   < 10) {hours   = "0"+hours;}
    if (minutes < 10) {minutes = "0"+minutes;}
    if (seconds < 10) {seconds = "0"+seconds;}
    return hours+':'+minutes+':'+seconds;
}

使用例

alert("186".toHHMMSS());
于 2019-03-17T15:37:32.703 に答える
-2

シュガーも使用できます。

Date.create().reset().set({seconds: 180}).format('{mm}:{ss}');

この例では、「03:00」が返されます。

于 2012-04-12T08:00:13.230 に答える
-4

以前にこのコードを使用して、単純な timespan オブジェクトを作成しました。

function TimeSpan(time) {
this.hours = 0;
this.minutes = 0;
this.seconds = 0;

while(time >= 3600)
{
    this.hours++;
    time -= 3600;
}

while(time >= 60)
{
    this.minutes++;
    time -= 60;
}

this.seconds = time;
}

var timespan = new Timespan(3662);
于 2009-08-24T14:41:13.277 に答える